0%

stm32103之USB虚拟串口不插拔USB线的方法

前言:

之前,实现了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,不报串口号不存在或串口被占用的错误了。