QSerialPort仅在第二次打开后才能正确读取

时间:2016-10-20 17:18:30

标签: c++ serial-port qt5

我有一个使用串行输入的程序。它安装在Win7和Win10的很多机器上。在某些机器上我有一个奇怪的问题,一开始打开串口时它会读取奇怪/不正确的值,大多数是0xff。当我关闭端口并重新打开它时,它可以正常工作。

    m_port = new QSerialPort( info ); // some info from QSerialPortInfo::availablePorts();

    if( m_port->open( QIODevice::ReadOnly ) )
    {
        m_port->setBaudRate( m_baudRate );
        m_port->setDataBits( m_dataBits );
        m_port->setParity( m_parity );
        m_port->setStopBits( m_stopBits );
        m_port->setFlowControl( QSerialPort::FlowControl::HardwareControl );
        m_port->clear();
     }

}

所以,我很幸运,它在90%的安装中工作,并且缺少一些明确的设置,或者它可能是Qt中的错误? (5.6.0 msvc 2013)

1 个答案:

答案 0 :(得分:3)

此处的问题很可能是您在打开后在串口上设置设置。因此,您的设置可能处于奇怪状态的一小段时间。它是第二次打开端口时工作,因为从第一次打开端口时设置已正确设置。

QSerialPort将在调用open时应用串口设置。

m_port = new QSerialPort( info ); // some info from QSerialPortInfo::availablePorts();

m_port->setBaudRate( m_baudRate );
m_port->setDataBits( m_dataBits );
m_port->setParity( m_parity );
m_port->setStopBits( m_stopBits );
m_port->setFlowControl( QSerialPort::FlowControl::HardwareControl );

if( m_port->open( QIODevice::ReadOnly ) )
{
    m_port->clear();
}