[問題] C++ rs232通訊一定要先用VB開一遍才能用
我用C++寫rs232通訊程式控制 8051 + USB to TTL(以下簡稱外部電路)
但是很奇怪
例如 COM2
若外部電路通電後第一次啟動 C++程式,機器毫無反應,且 RxTx 上看不到任何字串出現,
但只要經過一個神奇步驟 → 用 VB6 開啟 COM2 再關閉
C++程式就可以順利地做rs232通訊
若外部電路有關閉過電源,神奇步驟又要再重複一次
做過很多次輸出字串的監控,都沒發現異狀,我猜可能是C++這邊的通訊初始化有問題
附上code請大家幫我看一下,謝謝
/****Com Port Set****/
int COM_Num;
std::cout << "請輸入馬達控制COM Port號碼:"; std::cin >> COM_Num;
if(COM_Num==0) return -1;
std::string COM_PortNum;
COM_PortNum = "\\\\.\\COM" + int2str(COM_Num) ;
HANDLE hComm;
DCB dcb;
hComm = CreateFile(
COM_PortNum.c_str(), //指向檔案名稱的指標
GENERIC_READ | GENERIC_WRITE, //存取模式
0, //分享模式:分享該COM Port與否
NULL,//回傳的HANDLE是否可以被子程序繼承
OPEN_EXISTING, //指定如何開啟檔案
1, //檔案屬性及相關旗標,0為同步傳輸
0); //根據規定設為0 (書上說的,不知道原因)
GetCommState(hComm,&dcb);
dcb.BaudRate = CBR_9600;
dcb.ByteSize = 8;
dcb.Parity =0;
dcb.StopBits = ONESTOPBIT;
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.122.165.222
→
12/15 19:40, , 1F
12/15 19:40, 1F
抱歉,這個做法沒用,而且我發現不需要 GetCommState(hComm,&dcb); 也能跑
※ 編輯: deo2000 來自: 140.122.165.222 (12/15 22:07)
推
12/15 22:57, , 2F
12/15 22:57, 2F
→
12/15 22:59, , 3F
12/15 22:59, 3F
→
12/15 22:59, , 4F
12/15 22:59, 4F
→
12/15 23:01, , 5F
12/15 23:01, 5F
我在Get 到 Set 間加上
dcb.fDtrControl=DTR_CONTROL_HANDSHAKE;
dcb.fRtsControl=RTS_CONTROL_HANDSHAKE;
還是沒用耶?
※ 編輯: deo2000 來自: 140.122.165.222 (12/15 23:12)
→
12/16 00:36, , 6F
12/16 00:36, 6F
照這樣做就可以了! 感謝
但是怎麼會有這麼多範例都用 "\\\\.\\COM" ?
※ 編輯: deo2000 來自: 140.122.165.222 (12/16 15:29)
→
12/16 20:45, , 7F
12/16 20:45, 7F
→
12/16 20:46, , 8F
12/16 20:46, 8F
推
12/16 21:53, , 9F
12/16 21:53, 9F
→
12/17 12:28, , 10F
12/17 12:28, 10F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章