首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Qt(4.8)串口(Qextserialport)在2部分中读取来自设备的数据?

为什么Qt(4.8)串口(Qextserialport)在2部分中读取来自设备的数据?
EN

Stack Overflow用户
提问于 2017-01-09 08:13:15
回答 1查看 361关注 0票数 1

这是我的代码:(我使用qextserialport)

代码语言:javascript
复制
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。我将代码更改为以下代码:

代码语言:javascript
复制
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);
    }
}

但我的产出是:

代码语言:javascript
复制
4 "aa5524010400000000000000"   
12 "000000000000000000002801"

但应该是:

代码语言:javascript
复制
"aa5524010400000000000000000000000000000000002801"

我的输出大小可能是48字节或512字节。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-09 11:51:15

它依赖于串口驱动程序缓冲区。例如,您可以在一个就绪字节上获得readyRead()信号。您应该将接收到的字节保存到中间缓冲区并进行处理。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41543578

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档