淺談串口DCB流控制設置

    最近作了一個有關串口通訊的程序,在咱們這邊怎麼測試均可以, 但一交到客戶那邊就問題百出,不是普通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;
 
    }
     ...........
}
相關文章
相關標籤/搜索