热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何实现Qt上位机软件串口的按字节数据处理?

1.Qt串口类的选择最近在做一个小项目,需要用到Qt做上位机软件,本人也是边学边做,买了本《QtCreator快速入门》看了看就动手了,由于初学不是很了解Qt5的官方资源,一开始串

1.Qt串口类的选择

最近在做一个小项目,需要用到Qt做上位机软件,本人也是边学边做,买了本《QtCreator快速入门》看了看就动手了,由于初学不是很了解Qt5的官方资源,一开始串口开发使用的是第三方串口类QExtSerialPort,但是后来发现这个第三方串口类似乎不提供串口信息的查询,就果断放弃了。
同时也发现Qt5本身是提供串口类的,所以就用了官方资源,官方的串口类是提供串口信息查询,也就可以实现上位机软件的的串口号查找功能了,人性化很多。

2.如何实现Qt上位机软件串口的按字节数据处理?

这部分我在网上找了许多资料都不太管用,一些常见的学习资料,基本上都是说,在槽函数里使用QByteArray类型变量直接读出串口对象的全部数据,资料范例如下:

void Widget::readMyCom() //读取串口数据并显示出来
{
QByteArray temp = myCom->readAll();
//读取串口缓冲区的所有数据给临时变量 temp
ui->textBrowser->insertPlainText(temp);
//将串口的数据显示在窗口的文本浏览器中
}

在我这个项目里,需要从STM32(下位机)的串口接收6字节长度的数据,然后上位机软件接收数据,再做进一步处理工作。 显然上面的方法不适合,因为以上读出来的数据是一个流式文本,时长时短,不好控制长度。经过我仔细地检索信息,功夫不负有心人,终于找到了解决办法,大家可以参考这个知乎问答:

https://www.zhihu.com/question/46717728?sort=created

3.我的例子

首先是下位机部分,我这里测试时是在定时器更新中断中完成串口发送的,代码如下:

char num = 0;
int SHU = 0;
char DataBuff[6]={ 0x00};
float i = 0.0;
void TIM2_IRQHandler( void )
{
if( TIM_GetITStatus( TIM2,TIM_IT_Update )!= RESET )
{
TIM_ClearITPendingBit( TIM2,TIM_IT_Update );

SHU = i*100;//取四个整数和两个小数,i放大100倍,方便取小数
//注意取出来的数必须加0x30
//要以字符的形式发送才行,上位机软件才可以用qDebug()打印出来
DataBuff[0] = SHU/100000+0x30;
DataBuff[1] = ( SHU%100000)/10000+0x30;
DataBuff[2] = (( SHU%100000)%10000)/1000+0x30;
DataBuff[3] = ((( SHU%100000)%10000)%1000)/100+0x30;
DataBuff[4] = ((((SHU%100000)%10000)%1000)%100)/10+0x30;
DataBuff[5] = ((((SHU%100000)%10000)%1000)%100)%10+0x30;

USART1->SR;//空读SR,避免硬件上电后,首字节发送丢失
for( num=0;num<6;num++ )
{
USART_SendData( USART1,DataBuff[num]);
while( USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET );
USART_ClearFlag( USART1,USART_FLAG_TC );
}
if(i==1500) i=0;
else i++;
}
}

再是Qt上位机软件的信号和槽函数连接:

//连接信号至槽函数:串口有数据就读串口
connect(mycom,SIGNAL(readyRead()),this,SLOT(MyReadData()));

最后是槽函数和打印信息:

char DataBuff[6] = { 0x00};//在类中定义
unsigned char cnt = 0; //在类中定义
float distance = 0.0; //在类中定义
void MainWindow::MyReadData( void )
{
char ch = 0;
while( mycom->read(&ch,1) )
{
DataBuff[cnt] = ch;
cnt++;
if( cnt == 6 )
{
cnt = 0;
distance = (DataBuff[0]-0x30)*1000+(DataBuff[1]-0x30)*100+(DataBuff[2]-0x30)*10+
(DataBuff[3]-0x30)+ (DataBuff[4]-0x30)*0.1+(DataBuff[5]-0x30)*0.01;
qDebug("%4.2f",distance);
qDebug()<<DataBuff;
}
}
}

《如何实现Qt上位机软件串口的按字节数据处理?》


推荐阅读
  • 【go密码学】对称加密算法
    对称加密对称加密算法是相对于非对称加密算法而言,两者的区别在于,对称加密和加密和解密时使用相同的秘钥,而非对称加密在加密和解密时使用不同的秘钥(公钥和私钥)。常见的对称加密算法:D ... [详细]
  • 【JVM技术专题】深入分析CG管理和原理查缺补漏「番外篇」
    前提概要本文主要针对HotspotVM中“CMSParNew”组合的一些使用场景进行总结。自Sun发布Java语言以来,开始使用GC技术来进行内存自动管理࿰ ... [详细]
  • 本文整理了Java中com.google.gwt.user.client.ui.RootPanel.detachOnWindowClose方法的一些代码示例,展示了 ... [详细]
  • 开发笔记:PyQt5QSlider(滑动条)控件使用
    本文由编程笔记#小编为大家整理,主要介绍了PyQt5-QSlider(滑动条)控件使用相关的知识,希望对你有一定的参考价值。QSlider控件提供了一个垂直或者水平的滑动条,滑 ... [详细]
  • delphi控件大全
    本文章已收录于:delphi控件查询:http:www.torry.nethttp:www.jrsoftware.orgTb97最有名的工具条(ToolBar) ... [详细]
  • 是不是zlib是这些库的压缩算法的实现库,而这么多库它们只是在打包的时候使用了zlib进行压缩而已.而具体的打包格式就有ZIP,BZIP2,GZ之分?但是在我们在用gz压缩时候通常之前 ... [详细]
  • iic协议
    IIC简介IIC,Inter-IntegratedCircuit,集成电路总线,需要2根线连接拓扑,是半双工,适用于”字节型”设备。I2C总线物理拓扑结构IIC通信原理: 通过对S ... [详细]
  • 外层|条件下_MySQL还能这样玩第五篇之视图应该这样玩
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了MySQL还能这样玩---第五篇之视图应该这样玩相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 技术点:1、通过已知的网页路径获得流2、把流转换成字节数组3、把字节数组转换成String字符串显示在TextView控件中一、获得流publicstaticSt ... [详细]
  • 图像处理(7) : 边缘检测
    边缘检测是图形图像处理、计算机视觉和机器视觉中的一个基本工具,通常用于特征提取和特征检测,旨在检测一张数字图像中有明显变化的边缘或者不连续的区域 ... [详细]
  • PyQt 如何创建自定义QWidget
    这篇文章主要介绍了PyQt如何创建自定义QWidget,帮助大家更好的理解和学习使用pyqt,感 ... [详细]
  • Android开发之Notification(实现消息弹窗、提示音以及点击事件)
    文章目录通知管理器通知渠道通知发送通知更多效果添加点击事件取消消息通知管理器通知管理器(NotificationManager)类是一个通知管理器&# ... [详细]
  • i2c扩展32路gpio_【STM32Cube_13】使用硬件I2C读写EEPROM(AT24C02)
    寻求更好的阅读体验,请移步Mculover666的个人博客:【STM32Cube_13】使用硬件I2C读写EEPROM(AT24C02&# ... [详细]
  • Qt 学习笔记(5)绘图   五子棋游戏
    在上一篇博客CQt学习笔记(4)绘图中介绍了Qt中的绘图方法,基于上一篇的博客的知识,使用QPainter设计一个五子棋的棋 ... [详细]
  • 本文介绍了pack布局管理器在Perl/Tk中的使用方法及注意事项。通过调用pack()方法,可以控制部件在显示窗口中的位置和大小。同时,本文还提到了在使用pack布局管理器时,应注意将部件分组以便在水平和垂直方向上进行堆放。此外,还介绍了使用Frame部件或Toplevel部件来组织部件在窗口内的方法。最后,本文强调了在使用pack布局管理器时,应避免在中间切换到grid布局管理器,以免造成混乱。 ... [详细]
author-avatar
曹彩节
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有