我正在QT中创建一个脚本,用于从串行端口读取格式包(AA),(BB)等。我打开了串行端口,但是当我检查QByteArray值内部时,又回来了,我无法读取任何值。

这是我的代码

...
QSerialPort *serialPort = new QSerialPort();
serialPort->setPortName("ttyUSB0");
serialPort->setParity(QSerialPort::NoParity);
serialPort->setBaudRate(QSerialPort::Baud9600, QSerialPort::AllDirections);
serialPort->setStopBits(QSerialPort::OneStop);
serialPort->setFlowControl(QSerialPort::NoFlowControl);
serialPort->open(QIODevice::ReadOnly);

if (serialPort->isOpen()) {
    qDebug() << "Serial port is open...";
    QByteArray datas = serialPort->readAll();
    if (datas.size() == 0) {
        qDebug() << "Arrived data: 0";
    } else {
        for (int i = 0; i < datas.size(); i++){
            if (datas.at(i)) {
                qDebug() << datas[i];
            }
        }
    }

} else {
    qDebug() << "OPEN ERROR: " << serialPort->errorString();
}

serialPort->close();
qDebug() << "...serial port is closed!";

return 0;
...

最佳答案

您在readAll()之后立即致电open()。从一台计算机到另一台计算机可能要花费几纳秒的时间。

在9600波特下,每个字节的数据传输花费的时间略超过一毫秒。在那么短的间隔内,任何数据都绝对不可能到达,因此这就是为什么您没有数据的原因。

串行端口在打开它们之前不会开始缓冲传入的数据(在没有程序打开端口的情况下,它们如何使用波特率和其他设置进行接收和缓冲?)

使用某种阻塞读取功能(例如readLine())或事件循环,在数据到达时会对数据做出反应。

关于c++ - 如何从QT的串行端口读取数据?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39678253/

10-12 03:02
查看更多