我正在尝试使用QSerialPort类来读取和写入串行端口。 现在我正在使用eltima驱动程序实现的虚拟comports。 我可以像这样成功发送字节:
QSerialPortInfo info = QSerialPortInfo("COM30");
QSerialPort serial;
serial.setPort(info);
serial.setBaudRate(57600);
serial.open(QIODevice::ReadWrite);
char arr[] = {0xAA, 0xBB, 0xCC, 0xDD};
serial.write(arr, 4);
我正在尝试这样读(我只想读取一个字节;如果数据已准备好被读取,则此代码由定时器调用):
virtual uint8_t getByte(void)
{
char arr[2] = {0};
int8_t err = qPort.read(arr, 1);
DEBUG_ASSERT(err != -1);
if(! isNewByte() )
{
onReceiveFinished();
}
return arr[0];
}
如果我发送到虚拟端口(即我的程序)的任何值小于128,我就把它弄好了(因为调试器正在显示)。但是,如果我尝试发送128或更多,我得到值-12 o_o(如果我发送153 - 我得到25.不是-25或103)。 这对我来说似乎很奇怪。 任何人都可以看到错误在哪里?
答案 0 :(得分:0)
我的错误真是太愚蠢了。默认情况下,QSerialPort设置为7个数据位(实际上看起来不太实用),因此每个接收到的字节都会切断MSB(如减去128)。
然而,奇怪的是,发送工作正常。
答案 1 :(得分:0)
不。你错了做setBaudRate()。它需要在端口打开后进行。