最近作了一個有關串口通訊的程序,在咱們這邊怎麼測試均可以,
但一交到客戶那邊就問題百出,不是普通COM口通訊失敗,就是USB轉COM口通訊失敗。經過LOG,咱們知道緣由所在,就是咱們軟件對串口DCB流控制的設置,跟客戶的板子對DCB流控制設置不一致。而咱們在沒法獲知客戶DCB流控制設置的狀況下,瞎改了一番DCB設置,結果是可想而知的。由參考得知以下經驗(vc代碼),但願和遇到同類問題的XDJM們一塊兒分享。
VOID InitDCB(...)
{
...........
// Set serial parameters
dcb.BaudRate = m_dwBaudRate; // Band rate
dcb.ByteSize = m_nByteSize; // Data bit, either 7 or 8
dcb.Parity = m_nParity; // Parity, must between 0 to 4
dcb.StopBits = m_nStopBits; // Stop bit must between 0 to 2
dcb.fBinary = TRUE; // Bianry must be TRUE in Win32
dcb.fParity = FALSE;
#ifdef WIN32
dcb.fDtrControl = DTR_CONTROL_ENABLE;
dcb.fRtsControl = RTS_CONTROL_ENABLE;
#endif
switch (stPortPara->Flow) { // Judge flow control
case IdFlowX:
/*--------軟件流控制方式---------------
dcb.fOutX = TRUE;
dcb.fInX = TRUE;
dcb.XonLim = CommXonLim;
dcb.XoffLim = CommXoffLim;
dcb.XonChar = XON;
dcb.XoffChar = XOFF;
--------------------------------------*/
break;
case IdFlowHard:
/*--------硬件流控制方式---------------
dcb.fOutxCtsFlow = TRUE;
#ifdef WIN32
dcb.fRtsControl = RTS_CONTROL_HANDSHAKE;
#else
dcb.CtsTimeout = 30;
dcb.fRtsflow = TRUE;
#endif
--------------------------------------*/
break;
}
...........
}