\class Posix_QextSerialPort
\version 1.0.0
用Qt4 Posix_QextSerialPort串口程序遇到一个很奇怪的问题:
电脑开机第一次打开串口的时候Qt4写的程序的时候不能收发数据,如果用串口调试助手或者其他串口工具打开关闭一下串口,之后打开程序就正常了。
出现问题的代码:
QString portName = readerCfg.portName;
BaudRateType baudRateType = BAUD9600;
if (readerCfg.baudRate==9600)
{
baudRateType = BAUD9600;
}
else if (readerCfg.baudRate==57600)
{
baudRateType = BAUD57600;
}
else if (readerCfg.baudRate==115200)
{
baudRateType = BAUD115200;
}//end if.
_timeOut = 5;
//初始化串口
PortSettings portSettings = {baudRateType ,DATA_8,PAR_NONE,STOP_1,FLOW_OFF,1};
#ifdef _TTY_POSIX_
_seriaPort = new Posix_QextSerialPort(portName, portSettings,QextSerialBase::EventDriven);
#else
_seriaPort = new Win_QextSerialPort(portName, portSettings,QextSerialBase::Polling);
#endif
//_seriaPort = new Posix_QextSerialPort(portName, portSettings,QextSerialBase::EventDriven);
bool bOpen = _seriaPort ->open(QIODevice::ReadWrite);
修改后的代码:
#ifdef _TTY_POSIX_
_seriaPort = new Posix_QextSerialPort(portName, QextSerialBase::EventDriven);
#else
_seriaPort = new Win_QextSerialPort(portName, QextSerialBase::Polling);
#endif
_seriaPort->open(QIODevice::ReadWrite);
//设置波特率
_seriaPort->setBaudRate(baudRateType);
//设置数据位
_seriaPort->setDataBits(DATA_8);
//设置校验
_seriaPort->setParity(PAR_NONE);
//设置停止位
_seriaPort->setStopBits(STOP_1);
//设置数据流控制
_seriaPort->setFlowControl(FLOW_OFF);
//设置延时
_seriaPort->setTimeout(5);
区别就是先open,在设置串口参数,这样测试就没有问题。