日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

USB转串口

發布時間:2023/12/14 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 USB转串口 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

隨著USB越來越普及,USB轉串口也越來越流行,怎么知道串口號呢?

?

http://blog.csdn.net/badboyccj/article/details/6718968??

獲取系統串口號 ,然后通過打開文件的方法判斷哪個串口有效

?

編寫了一個串口通信的軟件,當時參照“串口調試助手”的源碼編寫的,后來出了兩個問題:
1、我偷懶調用了“串口調試助手”串口通信部分的封裝類,最開始只用com1 ? 和com2是沒什么太大問題,后來由于硬件的需要,裝了一個usb轉串口的東西,安裝以后擴展出來的串口自動識別成com10,或com11,或com12,我就直接在串口號的控件里加入了這幾個串口號,可是一運行就說找不到串口或打不開(在設備管理器中我已經把當前使用的串口號改為我要用的了)。但是改成com7,或com8,或com9也就是
com10以下的都能用,我就很奇怪是不是軟件里的設置有什么問題?
2、這個usb轉串口的東西在不同的電腦上驅動,會擴展成不同的串口號,就是在一臺電腦的不同usb口驅動都會顯示為不同的串口編號,我想知道有什么方法可以讓我在軟件里直接獲取出當前活動的串口號?

1.串口號大于9必須使用諸如\\.\COM10的形式
2.可以通過查詢注冊表的方式得到。代碼如下:

int ? GetSerialPort(CStringArray& ? arrCom)
{
arrCom.RemoveAll();

HKEY ? hkey; ? ?
LONG ? lRes ? = ? RegOpenKeyEx(HKEY_LOCAL_MACHINE, ? _T( "HARDWARE\\DEVICEMAP\\SERIALCOMM "), ? NULL, ? KEY_QUERY_VALUE ? | ? KEY_ENUMERATE_SUB_KEYS ? | ? KEY_READ, ? &hkey); ? ?
if ? (lRes ? == ? ERROR_SUCCESS) ? ?
{
TCHAR ? tchKey[MAX_PATH]; ? ?
TCHAR ? tchValue[20];
DWORD ? dwIndex ? = ? 0;
DWORD ? dwType ? = ? REG_SZ;
while(lRes ? == ? ERROR_SUCCESS)
{
DWORD ? dwCount ? = ? MAX_PATH;
DWORD ? dwVCount ? = ? 20;
lRes ? = ? RegEnumValue(hkey, ? dwIndex++, ? tchKey, ? &dwCount, ? NULL, ? &dwType, ? (LPBYTE)tchValue, ? &dwVCount);
if(lRes ? == ? ERROR_SUCCESS)
{
if((dwVCount ? > ? 0) ? && ? (dwCount ? > ? 0))
{
arrCom.Add(tchValue);
}
}
}
}
RegCloseKey(hkey);

return ? arrCom.GetSize();
}

代碼不是我寫的,不敢保證是正確的

?

dep下的讀串口號

http://topic.csdn.net/u/20100203/09/185ed7c5-8575-4b64-8a7b-93a1fa5a4c48.html

?

VC串口編程自動加入已經存在的串口號

//FindCommPort,查找注冊表中COM口設置,將其填充進 comboBox中

comboBox是一個下拉列表的控件,程序如下:


void FindCommPort( CComboBox *pComboBox )??
{??
HKEY hKey;
#ifdef _DEBUG??
ASSERT( pComboBox != NULL );
pComboBox->AssertValid();
pComboBox->ResetContent(); //清除現存內容
#endif
//打開注冊表中的串口信息
if( ::RegOpenKeyEx( HKEY_LOCAL_MACHINE,TEXT("Hardware\\DeviceMap\\SerialComm"), NULL, KEY_READ, &hKey) == ERROR_SUCCESS)??
{??
int i=0;
TCHAR portName[256],commName[256];
DWORD dwLong,dwSize;
while(1)
{
dwLong = dwSize = sizeof(portName)/sizeof(TCHAR);
//枚舉串口并添加進 pComboBox中
if( ::RegEnumValue( hKey, i, portName, &dwLong, NULL, NULL, (PUCHAR)commName, &dwSize ) == ERROR_NO_MORE_ITEMS ) //
break;
pComboBox->AddString( commName );// commName
i++;
}
if( pComboBox->GetCount() == 0 )
{
::AfxMessageBox( TEXT("Cannot Find any available COM port!") );
}
RegCloseKey(hKey);
}
}

?

?

注冊表好像不太準。CreateFile也不一定可靠(如果別的程序已經打開了某個串口)。

?

?

C/C++ code

總結

以上是生活随笔為你收集整理的USB转串口的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。