如何使用Qt编程实现串口接收不定长数据帧

如何使用Qt编程实现串口接收不定长数据帧,第1张

1、不管数据帧的长度,只要定义每个包的协议格式,比如头尾,然后解析这组数据,只要检测到协议正确,就可以处理数据了。

2、读取方法不变。

3、serialport->readAll();

很明显1T=243H=35 Z=02T=253H=34 Z=03T=227H=36 Z=02T=252H=33 Z=0不是用“,”来分割的

strsplit(","),很显然什么也得不到

Qt4:第三方串口接口类;Win_QextSerialPortmyCom;数据:QByteArraytemp=myCom->readAll();长度:templength();Qt5:QSerialPortmy_serialport=newQSerialPort;读取数据:QByteArrayxxx=my_serialport->readAll();长度:xxsize();数据:xxdata();至于说怎么保存到不同的QString这就是解析的问题,你可以随意发挥,反正就是将你得到的数据进行识别、类型转换、存储而已。

str2 = list1at(2)+","+list1at(3)+","+listat(4)//

我觉得问题可能在这 因为你每次读到得数据时不一样的 不能确保切割后都能分成4个 对list的越界访问造成程序崩溃 你可以把buf的内容输出看一下 看是不是能分割成四个!

QSerialPort这个类是从QT51开始引入的,之前都是通过QIODevice自己定义串口类,从而实现串口程序的开发。现在引入这个类了,将会非常方便的开发串口程序。为了使用这个类,需要在工程目录和附加依赖项中加入include的路径,以及链接库的路径,以及链接库的名称:

项目--->属性--->

C++

--->

常规

--->C:\Qt\Qt551\55\msvc2010\include\QtSerialPort项目--->属性--->

输入++

--->

附加依赖项--->Qt5SerialPortlib(如果是Debug版本,则是Qt5SerialPortdlib)版本源文件或者头文件需要加入#include

串口的信息可以通过QSerialPortInfo类获得,通过这个类,你可以正确的确定你要开启的串口,同时可以获得串口的描述性信息以及厂家信息。串口有三种打开模式,即ReadOnly,WriteOnly,以及ReadWrite。同时可以设置其停止位,波特率,数据位,校验方式以及流控,对应的函数方式分别为:setStopBits(),setBaudRates(

单片机接收处理串口的数据的过程就是配置好波特率、位宽、校验位等,收到数据 后可以引起中断,也可以查询标志位,然后进行相应的处理。

1) 串口时钟使能,GPIO 时钟使能。

2) 设置引脚复用器映射:调用 GPIO_PinAFConfig 函数。

3) GPIO 初始化设置:要设置模式为复用功能。

4) 串口参数初始化:设置波特率,字长,奇偶校验等参数。

5) 开启中断并且初始化 NVIC,使能中断(如果需要开启中断才需要这个步骤)。

6) 使能串口。

7) 编写中断处理函数:函数名格式为 USARTxIRQHandler(x 对应串口号)

以上就是关于如何使用Qt编程实现串口接收不定长数据帧全部的内容,包括:如何使用Qt编程实现串口接收不定长数据帧、Qt串口数据显示、用QT怎么实现通过串口实时获取智能小车的摄像头画面等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9466644.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-28
下一篇2023-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存