onlycook 发表于 2025-6-21 16:39

在CubeIDE中可以同时开发多个USB CDC(USB IAD)


[*]基础工程生成:在CubeIDE中创建工程,选择目标芯片,配置时钟、调试接口等基本参数。
[*]USB设备配置:在Connectivity选项中选择USB Device功能,使能中断。在Middleware中选择USB_Device选项,将USB功能配置为虚拟串口(CDC)。
[*]修改设备描述符:找到usbd_desc.c文件中的设备描述符数组USBD_FS_DeviceDesc,将设备类型改为组合设备类型,修改设备类、子类和设备协议代码。例如,将原本的0x02,0x02,0x00改为0xEF,0x02,0x01。同时,修改设备的VID和PID。
[*]修改PMA端点分布:进入usbd_conf.c文件,找到USBD_LL_Init函数,修改PMA端点初始化。根据实际使用的CDC数量,合理分配端点。例如,若使用两个CDC,需要为每个CDC分配输入输出端点以及命令控制端点。
[*]修改CDC初始化函数:找到USBD_CDC_Init函数,添加多个CDC的端点初始化操作。
[*]修改配置描述符和接口描述符:根据实际需求,修改配置描述符和接口描述符,确保每个CDC都有正确的接口定义。

公羊子丹 发表于 2025-6-23 07:23

我之前也做过双CDC,改描述符那块确实挺容易搞错。

周半梅 发表于 2025-6-23 07:24

改完端点后,用 USBlyzer 看下枚举结果就清楚了。

帛灿灿 发表于 2025-6-23 07:25

如果用的是STM32F1,PMA分配空间真得小心,不然直接死机。

童雨竹 发表于 2025-6-23 07:26

多CDC用串口调试起来还挺方便,就是前期配置麻烦点。

万图 发表于 2025-6-23 07:27

你这个流程太清晰了,我正好想搞复合设备,收藏了!

Wordsworth 发表于 2025-6-23 07:28

有没有用TinyUSB或者其他协议栈试过?Cube生成的结构有点死板。

Bblythe 发表于 2025-6-23 07:29

改配置描述符的时候容易漏接口关联字段,之前踩坑过。

Pulitzer 发表于 2025-6-23 07:29

如果两个CDC的数据量都大,建议用双缓冲,不然丢包。

Uriah 发表于 2025-6-23 07:30

改完描述符之后记得刷新Windows设备管理器,有时候驱动会缓存。

Clyde011 发表于 2025-6-23 07:31

有没有后续考虑加HID或者MSC?这样还能做个多功能接口设备。
页: [1]
查看完整版本: 在CubeIDE中可以同时开发多个USB CDC(USB IAD)