没有合适的资源?快使用搜索试试~ 我知道了~
Qt串口通信开发之QSerialPort模块Qt串口通信接收数据不完整的解决方法
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 14 下载量 148 浏览量
2021-01-20
01:54:07
上传
评论 3
收藏 149KB PDF 举报
温馨提示
在使用串口接收数据时,当数据量大的时候会出现数据接收不完整的情况。 因为串口数据获取函数readAll()由readyRead()信号触发,但readyRead()信号在串口读到起始标志时立即发送,并不保证一定是当前所发数据的起始部分。 因此串口通信双方在通信前应制定好通信协议,规定好数据的起始和结束标志,串口当读到完整的起始和结束标志之后,才认定读完一条完整的数据。 本例中用串口定时发送当前时间,用”#”表示数据的结尾,定时时间为0毫秒,即能发多快就发多快。 发送 void Widget::slotSendData() { QByteArray temp; temp.append(ge
资源推荐
资源详情
资源评论
Qt串口通信开发之串口通信开发之QSerialPort模块模块Qt串口通信接收数据不完整的解决方法串口通信接收数据不完整的解决方法
在使用串口接收数据时,当数据量大的时候会出现数据接收不完整的情况。
因为串口数据获取函数readAll()由readyRead()信号触发,但readyRead()信号在串口读到起始标志时立即发送,并不保证一定是当前所发数据的起始部分。
因此串口通信双方在通信前应制定好通信协议,规定好数据的起始和结束标志,串口当读到完整的起始和结束标志之后,才认定读完一条完整的数据。
本例中用串口定时发送当前时间,用”#”表示数据的结尾,定时时间为0毫秒,即能发多快就发多快。
发送
void Widget::slotSendData()
{
QByteArray temp;
temp.append(getCurrentTime());
temp.append("#");
serialPort->write(temp);
}
接收
void Widget::slotReadData()
{
QByteArray temp = serialPort->readAll();
if(!temp.isEmpty())
{
byteArray.append(temp);
if(byteArray.contains("#"))
{
ui->textEditReceive->setText(byteArray.split('#').at(0));
byteArray = byteArray.right(byteArray.length()-byteArray.indexOf('#')-1);
}
}
}
上面的源码在这里下载
下面是一个通过串口传输图片的例子
这里假设波特率为9600,那么一秒钟就能传输9600/8=1200字节。代码中将定时器设置为1秒,所以选择的图片应该小于1200字节。
这里为了演示如何完整接收数据,将图片按照指定大小分段发送,在每段之后紧接着发送字符串“###”。
代码如下所示:
void Widget::slotSendData()
{
matrix.rotate(90);
QPixmap tempPixmap = pixmap.transformed(matrix);
QBuffer buffer;
tempPixmap.save(&buffer,"jpg");
ui->labelImage->setPixmap(tempPixmap);
char *data=(char*)buffer.data().data();
int dataLength=buffer.data().length();
//打印图片大小
qDebug()<<"Image Size:"<<dataLength;
int standPacketSize=120;
int packetSize=0;
int packetNum=ceil(dataLength/120.0);
if(dataLength>120)
{
for(int i=0;i<packetNum;i++)
{
if(standPacketSize*(i+1)<dataLength)
{
packetSize=standPacketSize;
}
else
{
packetSize=dataLength-standPacketSize*i;
}
serialPort->write(data,packetSize);
data=data+packetSize;
}
}
serialPort->write("###",3);
}
运行效果如下图所示:
资源评论
- ww12927288492024-04-24这个资源内容超赞,对我来说很有价值,很实用,感谢大佬分享~
- 2301_774807702024-03-22资源很实用,对我启发很大,有很好的参考价值,内容详细。
weixin_38642636
- 粉丝: 12
- 资源: 931
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功