|
最近用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);
在此写出自己查找问题的经过,以便后来之人少走点弯路。
|
阿莫论坛20周年了!感谢大家的支持与爱护!!
你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。
|