2

我正在尝试使用 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 或更多,我会得到 value-128 o_o(如果我发送 153 - 我会得到 25。不是 -25 或 103)。这对我来说似乎很奇怪。任何人都可以看到错误在哪里?

4

2 回答 2

0

我的错误真的很愚蠢。QSerialPort 默认设置为 7 个数据位(实际上这似乎不太实用),因此每个接收到的字节都将其 MSB 截断(如减去 128)。

不过,奇怪的是,发送工作正常。

于 2013-06-06T13:50:03.640 回答
0

不是。你错了 setBaudRate()。需要在端口开放后进行。

于 2013-06-06T16:12:39.610 回答