UART 不接收 Qt 中的所有发送值
UART doesn't receive all sent values in Qt
我正在尝试通过 UART 从 PSoc 向我的 PC 发送数据,我想用 Qt 存储数据。 PSoc 发送 3 个字节的数据。这 3 个字节以 2.5Hz 的频率重复。当我用示波器检查信号时,一切正常。当我使用 HTerm 软件接收数据时,一切都符合预期。当我将用 C++ 编写的代码与 Qt 一起使用时,我遇到的问题是并非所有数据都在 Qt 中接收,只有三分之一在内存中。我希望每个新字节都会发出 readyRead 信号?但似乎信号只在 3 个字节的包的开头发出。此外,我的 qDebug 输出不会对 PSoc 的更改做出反应。因此,当我更改 PSoc 的值时,qDebug 中的输出不会改变。
我已经尝试读取 3 个字节(serial->read(3)),然后我首先收到一些单个字节,经过几次读取后我得到了我发送的 3 个字节,但这不是那么可重现。
connect(serial, SIGNAL(readyRead()), this, SLOT(readData()));
serial->setPortName(gui->ui->comboBox->currentData().toString());
serial->setBaudRate(QSerialPort::Baud115200);
serial->setDataBits(QSerialPort::Data8);
serial->setParity(QSerialPort::NoParity);
serial->setStopBits(QSerialPort::OneStop);
serial->setFlowControl(QSerialPort::NoFlowControl);
void uart::readData()
{
QByteArray data = serial->read(1);
qDebug() << data;
}
我希望每秒输出 2.5 次类似“0x01”“0x02”“0x03”的输出,但我只得到“0x01”
您只使用 read 阅读固定大小的内容。
可能是您获得了具有不同可用字节的 readyRead 信号,但您只读取了固定大小的信号
在您的 readyRead 插槽中尝试读取所有可用字节。
qint64 available = serial->bytesAvailable();
if (available > 0)
{
QByteArray data = serial->read(available);
qDebug() << data;
}
您也可以使用 readAll() 函数。
我刚刚找到了解决方案!
您必须将读取缓冲区大小设置为正确的值。
所以要读取三个字节的包,我必须设置:
serial->setReadBufferSize(3);
我正在尝试通过 UART 从 PSoc 向我的 PC 发送数据,我想用 Qt 存储数据。 PSoc 发送 3 个字节的数据。这 3 个字节以 2.5Hz 的频率重复。当我用示波器检查信号时,一切正常。当我使用 HTerm 软件接收数据时,一切都符合预期。当我将用 C++ 编写的代码与 Qt 一起使用时,我遇到的问题是并非所有数据都在 Qt 中接收,只有三分之一在内存中。我希望每个新字节都会发出 readyRead 信号?但似乎信号只在 3 个字节的包的开头发出。此外,我的 qDebug 输出不会对 PSoc 的更改做出反应。因此,当我更改 PSoc 的值时,qDebug 中的输出不会改变。
我已经尝试读取 3 个字节(serial->read(3)),然后我首先收到一些单个字节,经过几次读取后我得到了我发送的 3 个字节,但这不是那么可重现。
connect(serial, SIGNAL(readyRead()), this, SLOT(readData()));
serial->setPortName(gui->ui->comboBox->currentData().toString());
serial->setBaudRate(QSerialPort::Baud115200);
serial->setDataBits(QSerialPort::Data8);
serial->setParity(QSerialPort::NoParity);
serial->setStopBits(QSerialPort::OneStop);
serial->setFlowControl(QSerialPort::NoFlowControl);
void uart::readData()
{
QByteArray data = serial->read(1);
qDebug() << data;
}
我希望每秒输出 2.5 次类似“0x01”“0x02”“0x03”的输出,但我只得到“0x01”
您只使用 read 阅读固定大小的内容。
可能是您获得了具有不同可用字节的 readyRead 信号,但您只读取了固定大小的信号
在您的 readyRead 插槽中尝试读取所有可用字节。
qint64 available = serial->bytesAvailable();
if (available > 0)
{
QByteArray data = serial->read(available);
qDebug() << data;
}
您也可以使用 readAll() 函数。
我刚刚找到了解决方案! 您必须将读取缓冲区大小设置为正确的值。 所以要读取三个字节的包,我必须设置:
serial->setReadBufferSize(3);