我试图通过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;
}
我希望输出像“ 0x01”,“ 0x02”,“ 0x03”一样每秒2.5次,但我只会得到“ 0x01”
答案 0 :(得分:2)
您只能通过读取来读取固定大小。
是否可能准备好ReadReadRead信号并使用不同的字节,但只能读取固定大小的信号
在您的readyRead插槽中尝试读取所有可用字节。
qint64 available = serial->bytesAvailable();
if (available > 0)
{
QByteArray data = serial->read(available);
qDebug() << data;
}
您还可以使用readAll()函数。
答案 1 :(得分:0)
我刚刚找到了解决方案! 您必须将读取缓冲区大小设置为正确的值。 因此,为了读取三个字节的包,我必须设置:
serial->setReadBufferSize(3);