小贾-370388 发表于 2014-12-23 14:19:15

这个应该跟st的硬件没有关系主要是跟驱动有关系

wjandsq 发表于 2014-12-24 14:35:15

本帖最后由 wjandsq 于 2014-12-25 21:07 编辑

【原创】计算机中USB串口列表、友好名称及端点号的查找方法一、获得计算机的串口列表,一般用两种方法:

1. 循环法 1-256, 用Windows API一个个打开,返回不存在信息的删掉,其它保留。
   这个方法很笨,但确定都是正确的。

2. 查询注册表,得到串口列表。
   这个方法很快,但有时不正确(可能会多,只多不少)。

   例如超级终端打开,占用了一个USB串口,你不关闭超级终端,但把USB串口强行拔掉。
   这时用查询注册表的方法,得到的串口列表,仍然包括已经不存在的USB串口。

   修正的方法也简单,再次使用windows API依次打开列表中的串口,发现不存在,更新下列表。


二、STM32组成的USB多路串口中设备端点号的搜索

   现在我们要掌握USB转多路串口的端点号,以便清楚地了解当前使用的STM32,是用哪个串口和
   外面的设备通讯的。这里我们安排的USB端点号和物理串口的对应关系如下:
   MI_00 <--> USART1
   MI_02 <--> USART2
   MI_04 <--> USART3

   STM32的多路串口对应的串口号是变化的,但3个端点号不会变。我们想要在上位机软件中找到诸如
   MI_00此类的信息,就要另外想办法。

   想要得到串口的具体信息,是比较麻烦的,以往程序员都采用根据设备GUID的特征进行查询,
   我发现用这个方法特别不靠谱,例如上面的串口列表,就发现了错误。

   端点信息的查询也是个麻烦事。参考Windows API相关的书,找到枚举设备的函数,
   枚举所有存在的设备,串口相关的信息如下:

(标准端口类型)
通信端口 (COM1)
通信端口 (COM1)
\Device\00000083

ELTIMA Software
ELTIMA Virtual Serial Port (COM2->COM3)
Eltima Virtual Serial Bus
\Device\00000092

ELTIMA Software
ELTIMA Virtual Serial Port (COM3->COM2)
Eltima Virtual Serial Bus
\Device\00000093

STMicroelectronics Virtual COM Port
USB\VID_0483&PID_5740&REV_0200&MI_00
USB\Class_02&SubClass_02&Prot_01
USB\Class_02&SubClass_02&Prot_01

STMicroelectronics.
STMicroelectronics Virtual COM Port (COM70)
0000.001d.0000.001.005.000.000.000.000
\Device\0000009c


我们发现,在搜索到" STMicroelectronics Virtual COM Port "字符串时,下一行的信息是
   "USB\VID_0483&PID_5740&REV_0200&MI_00",可以根据这个信息,打开注册表,枚举这个
注册表分支下键值的名称,友好名称的键值字符串是"STMicroelectronics Virtual COM Port (COM70)",
然后我们分析下这个串口友好名称里的串口号,把这个串口号和实时串口列表中的号码匹配,如果一致,
就可以确认MI_00是这个串口的端点。到此,任务完毕。

如果只是搜索到" STMicroelectronics Virtual COM Port (COM70) "字符串,则不能确认MI_00就一定
是它的端点号,因为其它USB设备也有可能使用MI_00,这里只能是根据MI_00信息打开注册表,
匹配到友好名称及端口号,才可以确认MI_00就是该USB串口实际所使用的端点。

这个功能会在以后新版本的USB Serial Tools软件中提供。

备注: USB Serial Tools 自2012年启动开发,迄今为止,一直在成长。



发表于 2014-12-25 10:50:04

wjandsq 发表于 2014-12-24 14:35
一、获得计算机的串口列表,一般用两种方法:

1. 循环法 1-256, 用Windows API一个个打开,返回不存在信息 ...

不用的,.NET可以直接读取到串口列表的。

AndyYau-268557 发表于 2014-12-26 15:35:13

未遇见上述问题。建议还是从串口助手入手查找。如果是st硬件问题话,就不会现在只有你才发现。

沐紫 发表于 2014-12-30 10:52:08

楼主哪去了呢?问题解决了不

数码小叶 发表于 2015-1-4 10:04:32

晓枫VS枯叶 发表于 2014-12-22 12:07
楼主,串口没这么容易挂掉的吧,可能是串口助手上的串口号不能自动刷新,如果是串口运行的过程中拔掉了,有 ...

一样,突然拔掉就蓝屏:L

晓枫VS枯叶 发表于 2015-1-4 11:53:33

no zuo no die ,没事别这样搞,小心电脑短命..

lkl0305 发表于 2015-1-4 12:30:43

楼主是否安全退出了啊?

wjandsq 发表于 2015-1-4 15:38:02

如果实在搞不定上位机,试试这个串口工具,看会不会引起蓝屏 USB_Serial_Tools.zip 。

sanx 发表于 2015-1-5 11:08:00

wambob 发表于 2014-12-19 20:44
楼主的意思是使用虚拟串口,拔USB之前要关PC端串口,不关拔掉再插上USB,串口不能用? ...

重新插上之前一定要先关闭
页: 1 [2] 3 4 5
查看完整版本: STM32 USB虚拟串口 死掉的问题