jsh560 发表于 2022-11-3 21:44:52

STM32F103RCT6做的USB CDC类设备

如题,用STM32F103RCT6做了一个CDC类设备,突然有个疑惑,现在想做VC++动态链接库,DLL,目标是把我这个STM32设备嵌入到VC程序开发中,突然就卡在了,VC++代码中如何识别我这个CDC类设备是否插入到PC?
或比如用STM32做了多个CDC类设备,分别是A,B,C三种不同功能的设备,(PC上位机已经把设备管理器里面显示名字显示为A,B,C了)VC++怎么去操作我需要的A,或B ? 有这方面的大佬吗,能否指点下,谢谢。

zxq6 发表于 2022-11-3 21:53:16

枚举usb设备,匹配设备名

t3486784401 发表于 2022-11-3 22:24:28

既然是 CDC 了,不分配各串口号啥的?纯 USB 协议的话,是用 VID/PID 来区分的

jsh560 发表于 2022-11-3 22:44:41

t3486784401 发表于 2022-11-3 22:24
既然是 CDC 了,不分配各串口号啥的?纯 USB 协议的话,是用 VID/PID 来区分的
(引用自3楼)

串口号会随着插入的顺序不一样,COM口编号也不一样吧。

t3486784401 发表于 2022-11-3 23:08:41

jsh560 发表于 2022-11-3 22:44
串口号会随着插入的顺序不一样,COM口编号也不一样吧。
(引用自4楼)

这个看系统的,以 Arduino 为例:

a. 用 CH340 系列片子的主板,串口号随 USB 硬件插口而定:同一个 USB 口插不同设备,串口号固定;

b. 用 16U2 系列片子的主板(单片机HID),串口号随设备硬件而定:同一个设备插不同的 USB 口,串口号固定

说明协议/驱动会造成串口分配策略有别,用 STM32 的话应该更接近后一种情况,都是带硬件 USB 的单片机。

huangqi412 发表于 2022-11-4 10:19:25

t3486784401 发表于 2022-11-3 22:24
既然是 CDC 了,不分配各串口号啥的?纯 USB 协议的话,是用 VID/PID 来区分的
(引用自3楼)

严谨的说 cdc是通信大类包含串口,还有很多其他设备 比如电话
win有插入拔出事件,还有设备guid.

flash3g 发表于 2022-11-4 11:29:18

t3486784401 发表于 2022-11-3 23:08
这个看系统的,以 Arduino 为例:

a. 用 CH340 系列片子的主板,串口号随 USB 硬件插口而定:同一个 USB ...
(引用自5楼)

STM32是加载的微软官方标准的CDC驱动
CH340是芯片厂商编写虚拟串口VCP的驱动,这个芯片官网也描述了,VCP和CDC的区别

1a2b3c 发表于 2022-11-4 16:48:07

我不懂编程,但是用过CDC的东西,记得有两种情况,一个是可以设置串口号,完了以后插到哪个USB口出来的串口号都是一样的(设置的那个),如果不设置,自动分配后的就随着USB口不同而改变。
另外你电脑端是不是想去找这个cdc的串口设备?好像是不是可以搜索到串口的名字(就是第一次插到电脑上会跳出来一些信息,可以通过那个信息找肯定没问题吧?那个信息是可以自己编辑的(可能是驱动里面inf文件里面),这样自己设置的永远可以不会和别人的设备一样的描述符),最后定位到是哪个串口?

mPiDDR 发表于 2022-11-4 21:03:05

每个端口都打开,发一串自定义的指令,看设备的回应。在这个回应里做文章,区分不同的设备。

qwe2231695 发表于 2022-11-4 21:12:36

VCP 有流控,CDC只有数据

jsh560 发表于 2022-11-6 22:25:29

mPiDDR 发表于 2022-11-4 21:03
每个端口都打开,发一串自定义的指令,看设备的回应。在这个回应里做文章,区分不同的设备。
...
(引用自9楼)

对,目前我就采用这种方法每个COM口轮流打开去和下位机通信,握手信号对了就OK。
页: [1]
查看完整版本: STM32F103RCT6做的USB CDC类设备