[STM32U5] USBX CDC_ACM + USB_HS:CSRST 标志无法自动清除

[复制链接]
31|4
万法归宗 发表于 2026-9-4 13:57 | 显示全部楼层 |阅读模式
我使用 Nucleo STM32U5A5 评估板,基于 CDC_ACM 示例工程,UCPD + USB_HS。新建 CDC_ACM 工程,大部分 IOC 配置从这份示例 IOC 以及 STM32H7 系列 MOOC 教程复制过来;按照 STM32H7 MOOC 教程建议,用 WinMerge 把部分 USB 相关源码文件复制到新工程,下文称这个工程为新工程。

我发现函数 `static HAL_StatusTypeDef USB_CoreReset(USB_OTG_GlobalTypeDef *USBx);在内核复位操作后超时,CSRST 标志无法清零;但原版 demo 工程里这一步可以正常清除该标志。

我在`USB_CoreReset`断点下,通过 SFR 窗口比对 RCC/PWR/USB/UCPD 寄存器标志:demo 工程与新工程绝大多数寄存器一致,只有`TYPEC_VSTATE_CC2`存在差异 ,demo 中该位 = 1,新工程 = 0。

我已经查阅数据手册与参考手册,定位内核复位后 CSRST 无法清除的影响因素,请问有人在搭建 CDC/ACM 工程时遇到过该问题吗?



等凌晨日出 发表于 2026-9-4 14:38 | 显示全部楼层
CSRST标志无法自动清除,首先检查USB_HS内核时钟是否稳定。如果外部HSE未就绪或PLL输出频率不对,内核复位后硬件不会释放复位状态。
cr315 发表于 2026-9-4 14:40 | 显示全部楼层
用WinMerge复制文件时,很可能只复制了应用层代码,但漏掉了U5专用的USB HAL库底层修改,比如usb_otg.c中对U5系列HS-PHY的特殊延时处理。
茉璃夏 发表于 2026-9-4 16:10 | 显示全部楼层
TYPEC_VSTATE_CC2差异是线索但不是根本原因。CC2状态只影响Type-C方向检测,不参与USB内核复位逻辑,重点查UCPD的VBUS检测是否有效。
豌豆爹 发表于 2026-9-4 17:48 | 显示全部楼层
你从H7教程复制源码到U5工程,关键差异在于H7用的是USB_HS外设带内置PHY,而U5A5的USB_HS必须配合UCPD和外部PHY或内部HS-PHY,初始化顺序完全不同。
进入猫次元 发表于 2026-9-4 19:47 | 显示全部楼层
原版demo工程能清除CSRST,说明硬件正常。你的新工程中RCC里USB_HS时钟源可能没有正确使能,尤其是PLL3Q分频输出给USB时钟的路径。
麻花油条 发表于 2026-9-4 20:28 | 显示全部楼层
在调用USB_CoreReset之前,必须确保USB_HS模块的供电已经稳定。检查PWR寄存器中的USBHSVDDEN位是否置1,新工程可能漏了这一步。
classroom 发表于 2026-9-5 10:40 | 显示全部楼层
CSRST超时常见原因是USB总线上的D+ D-线路存在外部上拉电阻未正确配置。U5A5的USB_HS需要软件控制DP/DM上拉,在复位阶段不应提前使能。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

51

主题

481

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部
0