最近作了一个有关串口通讯的程序,在咱们这边怎么测试均可以,
但一交到客户那边就问题百出,不是普通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;
}
...........
}