Windows 11下Nucleo F103RB虚拟串口无法正常显示求助
Nucleo F103RB USB虚拟串口不显示的解决办法
先查硬件连接,别插错端口!
- Nucleo F103RB有两个USB口:CN9是STLink调试/自带VCP口,CN10才是USB OTG FS的目标VCP口,必须用Micro-USB线插CN10连电脑,插错端口肯定出不来新设备。
- 确认CN10能供电:如果Cube里开了VBUS检测,要保证CN10的VBUS引脚有5V输入;没开的话,直接插电脑USB口一般就能供电。
固件配置要到位
- 检查USB_DEVICE参数:
打开CubeIDE的配置界面,进USB_DEVICE的Device Descriptor,确保idVendor是0x0483,idProduct是0x5740——这是ST官方VCP的标准ID,改了的话电脑认不出来。 - 时钟必须是48MHz:
F1系列USB外设强制要求48MHz时钟,进Clock Configuration页面,确认PLL倍频是9(8MHz晶振×9=72MHz),USB预分频器设为1.5,这样72/1.5刚好是48MHz。时钟不对,USB根本没法完成枚举。
代码补全启动逻辑
- 默认生成的代码只初始化了USB设备,没启动枚举流程,要在
main.c里加两行:
在MX_USB_DEVICE_Init()之后,添上:HAL_PWREx_EnableUSBVoltageDetector(); // F1系列必须开启USB电压检测 MX_USB_DEVICE_Start(); - 要测试发数据的话,主循环里加这段:
注意uint8_t test_data[] = "USB VCP test!\r\n"; CDC_Transmit_FS(test_data, sizeof(test_data)-1); HAL_Delay(1000);CDC_Transmit_FS是Cube自动生成的函数,要是usbd_cdc_if.c里没有,说明你配置VCP的时候漏了关键步骤。
驱动和系统设置修正
- 卸载旧驱动重装:设备管理器里找到“STMicroelectronics STLink Virtual COM Port”,右键卸载并勾选“删除此设备的驱动程序软件”,然后重新插CN10的USB线,Windows会自动安装正确的VCP驱动,这时就能看到新的虚拟串口了。
- 关闭USB休眠:设备管理器里找到USB根集线器,在属性里取消“允许计算机关闭此设备以节约电源”,避免USB设备休眠导致枚举失败。
调试排查最后一步
- 用CubeIDE调试,在
MX_USB_DEVICE_Start()处加断点,确认函数没有返回错误。 - 检查GPIO配置:PA11(DM)和PA12(DP)必须设为Alternate Function Push-Pull,速度拉到High Speed,要是手动改过GPIO模式,改回默认配置就行。
内容的提问来源于stack exchange,提问作者Anthony
相关产品推荐
相关产品推荐

