ibichao 发表于 2014-11-27 00:49:42

用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]
查看完整版本: 用BuildCommDCB设置串口停止位为1.5位的注意事项