用BuildCommDCB设置串口停止位为1.5位的注意事项
最近用CSerialPort类写了个串口通信程序,当将停止位设成1.5成总是出错。
百度搜了下,这个问题解决了;
首先MSDN上已明确说了“The use of 5 data bits with 2 stop bits is an invalid combination, as is 6, 7, or 8 data bits with 1.5 stop bits. ”
翻译过来就是:数据位为5位的,停止位只能是1或1.5;数据位为6、7、8的停止位只能是1或2;
微软程序中停止位是个宏定义:
#define ONESTOPBIT 0
#define ONE5STOPBITS 1
#define TWOSTOPBITS 2
CserialPort类中的一条语句是:
sprintf(szBaud, "baud=%d parity=%c data=%d stop=%d", baud, parity, databits, stopbits);
所以我认为1个停止位stopbits = 0;1.5个stopbits = 1;2个stopbits = 2;
问题就出在这,改成如下即可:
if(stopbits == 0)
sprintf(szBaud, "baud=%d parity=%c data=%d stop=1", baud, parity, databits);
else if(stopbits == 1)
sprintf(szBaud, "baud=%d parity=%c data=%d stop=1.5", baud, parity, databits);
else
sprintf(szBaud, "baud=%d parity=%c data=%d stop=2", baud, parity, databits);
在此写出自己查找问题的经过,以便后来之人少走点弯路。
页:
[1]