【发布时间】:2015-10-25 19:06:45
【问题描述】:
我有:
QString hex = "0234301c4c49541d4741546f77617220a5a91e42411e43311e44332c30301e45332c30301e47737a74756b613742413303";
QByteArray test = QByteArray::fromHex(hex.toLatin1());
现在,我想通过 SerialPort 发送它:
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()
}
我没有结果(似乎发送小于 127 的字符/字节值,但不是超过此值的那些)
我的问题 -> 如何转换此 QByteArray 以正确发送所有字节? (我试图在谷歌中找到答案,但没有成功/我是新手)
【问题讨论】:
-
您使用的是
signed char或unsigned char还是uint8_t? -
我应该在哪里使用无符号字符? (在我的程序中,我应该发送从 0 到 255 的数据值)
-
你为什么要
serial->write(test.data());?QSerialPort::write()有一个重载,直接采用QByteArray所以它应该足够了serial->write(test);... 它是这样工作的吗?此外(与您的问题无关):为什么在将数据写入串行端口之前执行serial->waitForBytesWritten(-1);?我认为如果您在将数据写入串行端口(如果您真的需要的话)之后这样做会更有意义,不是吗? -
我同意,先做
serial->write(test);然后serial->waitForBytesWritten(-1)并删除flush() -
signed char类型只允许 7 位数据(假设您的平台有 8 位用于 char),1 位保留用于符号。unsigned char允许您将所有 8 位(0 到 255)用于数据。uint8_t数据类型表示您需要一个无符号的 8 位数据类型。请记住,char类型可以是char、signed char或unsigned char,取决于平台。
标签: c++ qt serial-port