qt 5.2串口写入Windows 7的问题

时间:2014-01-16 12:02:24

标签: c++ windows qt ftdi qtserialport

我们在硬件中使用FTDI串口CHIP。现在我们在Linux中运行了代码,然后我们转到了Windows 7.我们遇到了一些奇怪的问题。

问题: 如果没有运行执行此操作的其他控制台应用程序,我们无法将数据写入串行端口:

 serial.setPortName("COM3");
        if (serial.open(QIODevice::ReadWrite)) {
            bool success = serial.setBaudRate(QSerialPort::Baud9600) &
            serial.setStopBits(QSerialPort::OneStop) &
            serial.setDataBits(QSerialPort::Data8) &
            serial.setParity(QSerialPort::NoParity) &
            serial.setFlowControl(QSerialPort::NoFlowControl);
            qDebug() << "Connected to usb device: " << (success ? "OK" : "FAIL");

           while(true) {
                if(serial.waitForReadyRead(-1)) {
                    QByteArray out = serial.readAll();
                    for(int i=0; i< out.length(); i++) {
                        qDebug() << (int) out[i];
                    }
                }
            }
            serial.close();

所以它只是循环阅读全部。硬件不发送任何东西,因此读取只是无限循环。关闭并运行我们的写程序后,它运行正确。

char* input;
input = new char[size+3];
QByteArray bytearr;

for(int i=0;i<size+2;i++) {
    input[i] = (char) package[i];
    bytearr.append((unsigned char) package[i]);
}


QString serialPortName = "COM3";
QSerialPort serialPort;
serialPort.setPortName(serialPortName);
serialPort.open(QIODevice::ReadWrite);
serialPort.write(bytearr);
serialPort.flush();
serialPort.close();

运行后阅读一切正常,但没有全部阅读,它不会工作。我们做错了什么? 感谢。

2 个答案:

答案 0 :(得分:2)

我们在使用带有FTDI芯片的电路板的应用中遇到了类似的问题。我们尝试用19200波特/秒写入字节,虽然实际上大约有1200波特/秒(使用示波器看到)。问题是在写入一个字节后立即关闭串行端口。在关闭端口之前等待使用QThread :: msleep(5)有帮助。看来,设备在关闭操作期间会发生重置或其他事情,并且使用错误的波特率和其他参数发送最新的字节。

答案 1 :(得分:1)

我发现QT串口SW要求您处理QT事件才能工作。 在读取之前将qApp-&gt; processEvents()放在循环中使它对我有效。

(Windows-7上的QT 4.8.5)