电脑不识别STM32的USB虚拟串口

本文解决了一个特定的问题:电脑不识别STM32的USB虚拟串口。通过调整USB初始化代码的位置解决了握手失败导致的设备识别问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

电脑不识别STM32的USB虚拟串口

现象

板子和电脑联调的时候发现,USB线插入板子以后电脑不识别虚拟串口,通过禁用设备再启用,可以正常工作。也可以按一下复位键才能识别。
以前似乎没有这个问题,但记不清具体情况了。

电路

D+通过1.5K电阻上拉, 调试时整个板子通过与电脑连接的USB口供电, 即插上USB线才开始供电。

查找

由于通过禁用,启用能正常工作,于是有了上一篇文章
python–禁用、启用串口设备。
后来发现,如上操作之后,有时候仍然不能正常工作,表现为设备管理器中该设备为未识别的设备,于是判断是板子上出了问题。
换板子发现,故障重复,所以排除硬件问题。
初始化代码如下
在这里插入图片描述
将124行的USB初始化代码移到最前面,故障消除。

  MX_USB_DEVICE_Init();
  MX_GPIO_Init();
  MX_CRC_Init();
  MX_I2C2_Init();
  MX_I2C3_Init();
  MX_QUADSPI_Init();
  MX_USART1_UART_Init();
  MX_SPI1_Init();
  MX_USART2_UART_Init();
  MX_USART3_UART_Init();
  MX_ADC1_Init();
  MX_TIM15_Init();
  MX_TIM16_Init();
  MX_TIM17_Init();
  MX_RNG_Init();
  MX_TIM3_Init();
  MX_TIM4_Init();
//  MX_USB_DEVICE_Init();
  MX_TIM1_Init();
  MX_TIM2_Init();
  MX_TIM5_Init();

由于这是CubeMX生成的代码,现在运行没问题,可一旦重新运行CubeMX,我移到前面的部分又会回复如初。
于是代码变成这样

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */
  MX_USB_DEVICE_Init();					//增加的USB初始化代码
  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_CRC_Init();
  MX_I2C2_Init();
  MX_I2C3_Init();
  MX_QUADSPI_Init();
  MX_USART1_UART_Init();
  MX_SPI1_Init();
  MX_USART2_UART_Init();
  MX_USART3_UART_Init();
  MX_ADC1_Init();
  MX_TIM15_Init();
  MX_TIM16_Init();
  MX_TIM17_Init();
  MX_RNG_Init();
  MX_TIM3_Init();
  MX_TIM4_Init();
  MX_USB_DEVICE_Init();
  MX_TIM1_Init();
  MX_TIM2_Init();
  MX_TIM5_Init();
  /* USER CODE BEGIN 2 */

在USER CODE BEGIN SysInit代码段,增加USB的初始化部分,其他不变。
即整个初始化阶段USB被初始化了2次,但不会影响正常工作。

分析

在USB设备连上主机以后, 主机检测到D+或D-上的电平变化, 识别出有设备接入。于是开始与从设备的握手过程。
但是我板子上的片上外设比较多,CubeMX生成USB的初始化代码又放在比较靠后的位置,造成USB初始化还未完成,主机已经等待超时,造成握手失败。
将初始化代码前移以后,即可正常工作。
CubeMX生成的代码有坑,不是一次两次了,甚至HAL库自带的初始化代码不能驱动硬件我也遇到过,平常心,问题解决就好

如果你在使用 Ubuntu 系统时发现无法检测到外接显示器,这可能是由多种原因引起的,例如显卡驱动问题、连接线缆故障或者是显示设置的问题。下面是一些排查步骤: ### 排查与解决方法 1. **检查硬件连接** 首先确认显示器是否正常工作,并且视频线缆(如HDMI、DisplayPort等)已经牢固地插入电脑和显示器。 2. **重启系统或登录会话** 有时候简单的重启就能解决问题。尝试注销并重新登录或者直接重启计算机。 3. **更新图形驱动程序** - 打开“软件和更新”工具,在其中选择“附加驱动程序”,查看是否有可用的专有GPU驱动。 - 如果存在新版本的NVIDIA或AMD驱动,请安装最新的稳定版驱动程序。 4. **强制识别显示器 (xrandr 命令)** 使用终端命令可以手动配置显示器: ```bash xrandr --listmonitors # 列出当前所有已知屏幕信息 cvt <分辨率宽度> <分辨率高度> <刷新率> ``` 示例生成模式行代码: ```bash cvt 1920 1080 60 # 输出类似 "Modeline" 的一行内容 sudo xrandr --newmode "<从上一步复制得到的 Modeline>" sudo xrandr --addmode VGA-1 新建模式名 #(VGA-1 替换为你实际使用的端口) sudo xrandr --output VGA-1 --mode 新建模式名 ``` 5. **BIOS 设置** 进入 BIOS 或 UEFI 固件界面,确保集成显卡或独立显卡被启用。 6. **切换桌面环境** 某些窗口管理器可能会导致兼容性问题,你可以试一试更换至其他轻量级桌面环境比如 XFCE 或 MATE。 如果以上操作仍然无效,则建议进一步查阅日志文件 `/var/log/Xorg.0.log` 查看是否存在错误提示;另外还可以搜索社区论坛以及 bug 跟踪网站寻找更多帮助资源。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老李的森林

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值