|
|
一、獲得計(jì)算機(jī)的串口列表,一般用兩種方法:
1. 循環(huán)法 1-256, 用Windows API一個(gè)個(gè)打開,返回不存在信息的刪掉,其它保留。
這個(gè)方法很笨,但確定都是正確的。
2. 查詢注冊(cè)表,得到串口列表。
這個(gè)方法很快,但有時(shí)不正確(可能會(huì)多,只多不少)。
例如超級(jí)終端打開,占用了一個(gè)USB串口,你不關(guān)閉超級(jí)終端,但把USB串口強(qiáng)行拔掉。
這時(shí)用查詢注冊(cè)表的方法,得到的串口列表,仍然包括已經(jīng)不存在的USB串口。
修正的方法也簡(jiǎn)單,再次使用windows API依次打開列表中的串口,發(fā)現(xiàn)不存在,更新下列表。
二、STM32組成的USB多路串口中設(shè)備端點(diǎn)號(hào)的搜索
現(xiàn)在我們要掌握USB轉(zhuǎn)多路串口的端點(diǎn)號(hào),以便清楚地了解當(dāng)前使用的STM32,是用哪個(gè)串口和
外面的設(shè)備通訊的。這里我們安排的USB端點(diǎn)號(hào)和物理串口的對(duì)應(yīng)關(guān)系如下:
MI_00 <--> USART1
MI_02 <--> USART2
MI_04 <--> USART3
STM32的多路串口對(duì)應(yīng)的串口號(hào)是變化的,但3個(gè)端點(diǎn)號(hào)不會(huì)變。我們想要在上位機(jī)軟件中找到諸如
MI_00此類的信息,就要另外想辦法。
想要得到串口的具體信息,是比較麻煩的,以往程序員都采用根據(jù)設(shè)備GUID的特征進(jìn)行查詢,
我發(fā)現(xiàn)用這個(gè)方法特別不靠譜,例如上面的串口列表,就發(fā)現(xiàn)了錯(cuò)誤。
端點(diǎn)信息的查詢也是個(gè)麻煩事。參考Windows API相關(guān)的書,找到枚舉設(shè)備的函數(shù),
枚舉所有存在的設(shè)備,串口相關(guān)的信息如下:
(標(biāo)準(zhǔn)端口類型)
通信端口 (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
我們發(fā)現(xiàn),在搜索到" STMicroelectronics Virtual COM Port "字符串時(shí),下一行的信息是
"USB\VID_0483&PID_5740&REV_0200&MI_00",可以根據(jù)這個(gè)信息,打開注冊(cè)表,枚舉這個(gè)
注冊(cè)表分支下鍵值的名稱,友好名稱的鍵值字符串是"STMicroelectronics Virtual COM Port (COM70)",
然后我們分析下這個(gè)串口友好名稱里的串口號(hào),把這個(gè)串口號(hào)和實(shí)時(shí)串口列表中的號(hào)碼匹配,如果一致,
就可以確認(rèn)MI_00是這個(gè)串口的端點(diǎn)。到此,任務(wù)完畢。
如果只是搜索到" STMicroelectronics Virtual COM Port (COM70) "字符串,則不能確認(rèn)MI_00就一定
是它的端點(diǎn)號(hào),因?yàn)槠渌黆SB設(shè)備也有可能使用MI_00,這里只能是根據(jù)MI_00信息打開注冊(cè)表,
匹配到友好名稱及端口號(hào),才可以確認(rèn)MI_00就是該USB串口實(shí)際所使用的端點(diǎn)。
這個(gè)功能會(huì)在以后新版本的USB Serial Tools軟件中提供。
備注: USB Serial Tools 自2012年啟動(dòng)開發(fā),迄今為止,一直在成長(zhǎng)。
|
|