<QT障碍之路>qt中使用串口类接收数据不完整

本文探讨了在QT中使用serial->readAll()函数接收串口数据时,因信号分段导致的问题及解决方案。介绍了通过定义帧头和帧尾进行数据校验的方法,并提出利用延时函数等待完整数据帧发送完成的策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题:当用QT中的serial->readAll()的时候,不会把全部的数据一次性都读取出来,而是阶段性的。原因是因为当串口有信号时候,readyRead()信号就会被抛出,那么一帧完整的数据帧就可能被分多次接收进来,会影响一些后续的操作。

解决方法:

  1.通讯双方提前定义好帧头和帧尾,方便进行校验。当检测到到帧头和帧尾,才认定一帧数据时完整的。

  2.在readyRead()信号抛出后,再readAll()函数前使用延时函数,等待一帧数据完全发送完成。

 1 /* 以下只是部分代码 */
 2 #include <QTimer>
 3 
 4 int main()
 5 {
 6     QTimer *timer = new QTimer();
 8     connect(timer, SIGNAL(timeout()), this, SLOT(timerStop()));
 9 }
10 
11 void Dialog::timerStop(void)
12 {
13     g_RecBuf.prepend(0xBB);
14     timer->stop();
15     {
16         qDebug()<<g_RecBuf;
17         Dialog::saveDataToFile(g_RecBuf);
18     }
19     g_RecBuf.clear();
20 }
21 
22 void Dialog::readParam()
23 {
24     timer->start(100);
25     g_RecBuf.append(serial->readAll());
26 }

 

转载于:https://www.cnblogs.com/zhuangquan/p/10114020.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值