
1问题发生的背景1 i$ h0 `: q9 I. S p/ { 细心的用户可能会发现,使用到我们最新的STM32CubeMX 6.9.1对STM32H5的 USB外设进行配置的时候,只能用USBX,而以前的Classic USB库不能选择了。由于USBx 是基于Threadx OS的,客户更多的希望是裸机版本的,所以在这儿给大家提供一个移植的方法。 : ?- S* m9 _- d5 b, ?8 t 2问题的分析7 c& P% J4 _3 ]% O6 s7 B 虽然在STM32CubeMX 6.9.1上不能使用经典的Classic USB驱动了,但是实际上在 github上,仍能发现一些可用的资源供参考: GitHub - STMicroelectronics/stm32h5-classic-coremw-apps: Provide a set of applications for STM32H5xx series based on the STM32 Classic Core Middleware libraries GitHub - STMicroelectronics/stm32u5-classic-coremw-apps: Provide a set of applications for STM32U5xx series based on the STM32 Classic Core Middleware libraries 下载这两个链接,发现H5例程里面仅仅有Classic USB driver的HID例程,并没有 CDC的,但这对于我们想要移植来说,已经足够了。3 s' l0 S0 J& H) {' F ! a2 @7 y" o+ a 4 Q6 C8 e. k, ] f( F& G7 ~ 3Classic USBD CDC驱动的移植/ ~ y* {7 `. ^2 o$ |! d( i) F 3.1 解压缩编译验证原始工程& o1 H2 O* ?, F& C 对原始的H5例程进行编译,发现报如下错误: G3 P7 R1 c; c6 q# u7 z. j% } ![]() 驱动相关文件夹……\stm32h5-classic-coremw-apps-main\Drivers 里内容是空的;解决方法:建议将最新版本的STM32CubeH5 lib里面的Drivers全部拷贝即可(含有 BSP、CMSIS、STM3H5xx_HAL_Driver);3 ^! u# w; J% \4 l 库文件STM32_USB_Device_Library 也为空,建议从github上下载: GitHub - STMicroelectronics/stm32_mw_usb_device: Provides the USB Device library part of the STM32Cube MCU Component "middleware" for all STM32xx series. 解压后,再复制stm32_mw_usb_device-master内的Core,Class的文件夹到 \stm32h5-classic-coremw-apps-main\Middlewares\ST\STM32_USB_Device_Library,编译通过,无错误。+ v0 w7 {( F# D 下载工程到NUCLEO H563运行,通过设备管理器能找到相应的HID设备,测试按一 下USER BUTTON按键,则鼠标也会跟着横向移动一步。 ![]() 基于此,我们准备开始新建CDC的例程。 ![]() 为了更简便的在H5上移植USB Device外设,我们将PD功能相关的库去除(如上图红色框),并屏蔽User Code部分关于USBPD的处理并解决编译错误. Main 函数可以简化为如下:9 T. U: K5 ~3 j) D( G7 W: s7 X ![]() ![]() % d6 M/ T9 V2 |) N% J 9 G, \4 @/ v' d2 I- g6 f& y6 \ 3.3.实现USB CDC的枚举8 ~# |. h; l5 H) B! O0 a 即使目前使用的是HID类,但是不同USB类,对应枚举的实现其实是一样的,所以,第一步:将usbd_hid.c 移除,项目工程中加入\stm32_mw_usb_device master\Class\CDC\Src 中的 usbd_cdc.c,并修改相应头文件名称和路径,解决编译问题;另外,由于移除了usbd_hid.c文件,所以在应用层也需要并屏蔽掉HID相关的应用层操作;主要比如HAL_GPIO_EXTI_Rising_Callback(),然后编译,会遇到下面3个错误: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() 简单的验证64个字节之内的发送与接收,修改函数如下:% f6 f2 {6 O' t ![]() ) v7 w/ \0 b& }' e 测试如下:# w* @3 C4 i: R7 Y' Q" |6 u) ^ ![]() |
STM32电路知识学习
兔哥的初代M33【002】-H503Nucleo 内部flash操作
实战经验 | 进一步认识STM32H5的OBK
优雅至极!STM32H5咖啡机,高级GUI与安全功能之双响炮
STM32H503生成带dead time的互补PWM
NUCLEO-H563ZI刷入Micropython固件并点亮LED灯
基于STM32H5的DA之初体验经验分享(带 Trust Zone)
【免费申请】高性能和低成本双Buff加持的NUCLEO H533RE,等你来!
【NUCLEO-H533RE评测】使用双存储区Flash 在不关闭系统的状态下,实现OTA
【NUCLEO-H533RE评测】高性能-全频,硬件加速在电机控制相关应用的速度对比。
还没碰到,先学习。