淺談串口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;

 

    }
     ...........
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章