QSerialPort和发送字节(值> 127?)

时间:2015-10-22 21:15:28

标签: c++ qt serial-port

我有:

serial = new QSerialPort(this);
serial->setPortName("ttyACM0");
serial->setBaudRate(QSerialPort::Baud9600);
serial->setDataBits(QSerialPort::Data8);
serial->setParity(QSerialPort::NoParity);
serial->setStopBits(QSerialPort::OneStop);
serial->setFlowControl(QSerialPort::NoFlowControl);

if(serial->open(QIODevice::ReadWrite))

{

    qDebug()<<"Port is open!";
    if(serial->isWritable())
    {
        qDebug()<<"Yes, i can write to port!";
    }
    serial->waitForBytesWritten(-1);
    serial->write(test.data());
    serial->flush(); // Port Error 12 (timed out???)
    serial->close()
 }

现在,我想通过SerialPort发送它:

{{1}}

我没有结果(也是char / byte值,它们似乎是小于127,但不是那些超过这个值的那些)

我的问题 - &gt;如何将此QByteArray转换为corectly发送所有字节? (我试图在谷歌找到答案,但没有成功/我是新手)

2 个答案:

答案 0 :(得分:3)

你几乎肯定不想调用带有const char *的QSerialPort写入重载。查看docs的重载:

  

将数据从8位字符的零终止字符串写入设备。

但是你没有写一个零终止的C字符串,你正在编写任意二进制数据。所以你需要调用直接接受QByteArray的write重载,如下所示:

serial->write(test);

正如其他一些评论中所述,在调用write之前有关waitForBytesWritten的内容也没有多大意义,但是你最大的问题是尝试将任意数据的QByteArray视为以null结尾的C-String

答案 1 :(得分:0)

他们是crc代码中的错误(从某个Web门户下载) 它被转换为uint16_t而不是uint8_t 现在它确实有效。 谢谢你的帮助!