• 资料介绍
  • 在线预览
  • 相关推荐
申请入驻 产业图谱

LAT1496 基于 USBD库CDC Standalone例程中的一个Bug解析

2025/03/06
683
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

LAT1496 基于 USBD库CDC Standalone例程中的一个Bug解析

453.53 KB

1、引言

当前越来越多的 STM32 芯片支持 USB-PD,目前新提供的 STM32 的 USB 例程中会把USB-PD 和 USB 合在一起。如果有客户只需要 USB,那就需要剥离 USB-PD。另外,STM32U5 的 Cube 库中只提供了基于 USBX 的例程,如果客户要使用基于USB_USBD_Library 则需要到 GitHub 上去下载。

2、问题

2.1. 问题详情

客户在开发其产品过程中,使用了 STM32U575ZIT6Q。因为客户对 USBX 不熟悉,所以希望 ST 能够提供基于 ST_USBD_Library 的 CDC_Standalone 的例程,以实现虚拟串口功能。

建议客户到 GitHub 上去下载:https://github.com/STMicroelectronics/stm32u5-classic-coremw-apps

客户下载后发现里边提供的 CDC_Standalone 的例程是带有 USB-PD 的,客户对 USBPD 不熟悉,希望能够提供给他们不带 USB-PD 的,所以就需要从这个例程中对 USB-PD 进行剥离。

在对 USB-PD 进行剥离后,并在 usb_device.c 中的 MX_USB_Device_Init()函数中添加USBD_Start()函数启动 USB。

按理说,进展到这一步,USB 就应该可以工作的。事实上,发现在 NUCLEO-U575ZI-Q板子上测试时,当通过 USB 连接到 PC 后,就会发现枚举成功了,PC 可以正常识别到虚拟串口。但是,看起来无法工作,在线调试时发现其进入了 Error_Handler(),也就是说,在什么地方出错了,工作不了。

2.2. 问题分析

查了很多遍,怎么都看不出 USB 的配置哪里有问题,看起来都还好,而且是从原例程剥离时并没有动 USB 的代码,觉得有点不可思议。后来实在没办法,只好挨个在进入 Error_Handler 的入口处设断点,最后终于捕捉到进入Error_Handler 的地方了,为在 CDC_Itf_Init()函数中以中断方式启动 TIM3 的地方出问题了。

觉得很奇怪,这只是以中断方式启动 TIM3 而已,为什么会出错?通过在线调试,查看上面的 TIM_Config()函数时,发现了问题。TIM_Config()函数内容。

2.3. 解决方法

问题找到了后,解决方法也很简单,就是把 TIM_Config()函数中的调用HAL_TIM_Base_Start_IT()的语句去掉,避免重复调用就可以了。

3、原代码为什么能运行?

细心的朋友们可能就想到了一个问题:你说原代码中就有这个 Bug,那为什么原代码运行得好好的?

这个问题很好,主要是因为在进行 USB-PD 剥离后在编译时编译器提示 Error_Handler()重复声明了,在 IAR 中只是警告,在 Keil 中就直接是错误了。

4、小结

使用 GitHub 上的 https://github.com/STMicroelectronics/stm32u5-classic-coremwapps 软件包进行基于 USB_USBD_Library 的 STM32U5 的 CDC_Standalone 进行开发的时候,需要注意到此 Bug。如果在开发过程中,遇到 Error_Handler(),可以看看是否这里没有修改。

在线预览

相关推荐

意法半导体拥有49,000名半导体技术的创造者和创新者,掌握半导体供应链和先进的制造设备。作为一 家半导体垂直整合制造商(IDM),意法半导体与二十多万家客户、成千上万名合作伙伴一起研发产品和 解决方案,共同构建生态系统,帮助他们更好地应对各种挑战和新机遇,满足世界对可持续发展的更高需 求。意法半导体的技术让人们的出行更智能,让电源和能源管理更高效,让云连接的自主化设备应用更广 泛。我们正按计划在所有直接和间接排放(包括范围1和范围2)、产品运输、商务旅行以及员工通勤排 放(重点关注的范围3)方面实现碳中和,并在2027年底前实现100%使用可再生电力的目标。 详情请浏 览意法半导体公司网站:www.st.com.cn