这是我的代码:(我使用qextserialport)
SerialPort::SerialPort(QString port)
{
sp=new QextSerialPort;
sp->setPortName(port);
/*port->setBaudRate(BAUD9600);
port->setFlowControl(FLOW_OFF);
port->setParity(PAR_NONE);
port->setDataBits(DATA_8);
port->setStopBits(STOP_2);*/
sp->setBaudRate(BAUD115200);
sp->setDataBits(DATA_8);
sp->setFlowControl(FLOW_OFF);
sp->setParity(PAR_NONE);
sp->setStopBits(STOP_1);
sp->open(QIODevice::ReadWrite);
connect(sp,SIGNAL(readyRead()),this,SLOT(ReadData()));
}
void SerialPort::ReadData()
{
QByteArray ba;
ba.resize(512);
ba=sp->readAll();
emit DataRecieve(ba);
}这段代码一开始运行在Ubuntu上,显示了从设备接收到的所有字节,但是当我在linux嵌入式设备上测试它时,这段代码从串行设备中读取数据,共分2部分。()在我的字节中没有\n。我将代码更改为以下代码:
void SerialPort::ReadData()
{
QByteArray ba;
ba.resize(512);
if(sp->bytesAvailable()>0 || sp->waitForReadyRead(20000))
{
qDebug()<<sp->bytesAvailable();
ba=sp->readAll();
qDebug()<<ba.toHex();
emit DataRecieve(ba);
}
}但我的产出是:
4 "aa5524010400000000000000"
12 "000000000000000000002801"但应该是:
"aa5524010400000000000000000000000000000000002801"我的输出大小可能是48字节或512字节。
发布于 2017-01-09 11:51:15
它依赖于串口驱动程序缓冲区。例如,您可以在一个就绪字节上获得readyRead()信号。您应该将接收到的字节保存到中间缓冲区并进行处理。
https://stackoverflow.com/questions/41543578
复制相似问题