前言:
之前,实现了STM32103的USB虚拟串口的功能,但是调试时发现当每次下载完程序后,需要重新插拔USB线,电脑端才能识别到,反复这样的操作很烦人。其实解决办法也很简单,就是让USB的两个管脚都保持几个毫秒的低电平即可…
实现步骤如下:
主要要在main.c文件增加代码,操作USB的两个PIN即可,还是老套路,贴代码和代码截图,方便复制和对照。
首先,声明和调用如下:
/* USER CODE BEGIN 0 */
void USB_Status_Init(void);
/* USER CODE END 0 */
/* USER CODE BEGIN SysInit */
USB_Status_Init();
/* USER CODE END SysInit */
其次,函数USB_Status_Init()实现:
/**函数用来复位USB口
*即让USB的两个PIN保持一段时间低电平。
**/
void USB_Status_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
/* GPIO Ports Clock Enable */
__HAL_RCC_GPIOA_CLK_ENABLE();
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_11|GPIO_PIN_12, GPIO_PIN_RESET);
/*Configure GPIO pin : PA11 PA12 */
GPIO_InitStruct.Pin = GPIO_PIN_11|GPIO_PIN_12;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
HAL_Delay(10);
}
测试:
完成上面的操作后,编译,下载,开始测试,不用每次都要插拔USB线。
按复位键反复测试时,在PC上用串口调试助手打开虚拟的串口号都OK,不报串口号不存在或串口被占用的错误了。