首页 > 其他分享 >九、5 USART串口数据包

九、5 USART串口数据包

时间:2024-10-08 22:19:43浏览次数:10  
标签:状态 USART 数据 包尾 串口 包头 接收 数据包

数据包作用:把一个个单独的数据给打包起来,将同一批的数据进行打包和分割,方便接收方进行识别,方便我们进行多字节的数据通信。

1、串口收发HEX数据包

(1)数据包的格式是个人规定的,如以FF为包头,FE为包尾,用于控制接收

防止数据与包头包尾重复的处理方法:

1)限制载荷数据的范围:可以在发送的时候,对数据进行限幅,如X、Y、Z三个数据,变化范围都可以是0~100;

2)若无法避免载荷数据和包头包尾重复,就尽量使用固定长度的数据包

3)增加包头包尾的数量,让它尽量呈现出载荷数据出现不了的状态,如使用FF、FE作为包头,FD、FC作为包尾

(2)包头包尾并不是全部都需要的,比如我们可以只要一个包头,把包尾删掉(但载荷和包头重复的可能性更大)

(3)固定包长和可变包长的选择问题

HEX数据包:如果载荷会出现与包头包尾重复的情况,最好选择固定包长。

(4)各种数据转换为字节流问题

这里的数据包都是一个字节一个字节组成的, 如果想发送16位或32位整型数据、float、double,甚至结构体,其实都没有问题,因为它们内部其实都是由一个字节一个字节组成的,只需要一个uint8_t的指针指向它,把它们当做一个字节数组发送就行

2、文本数据包

由于数据译码成了字符形式,就会存在大量的字符可以作为包头包尾,可以有效避免载荷和包头包尾重复的问题。

文本数据包一般以换行为包尾

当接收到载荷数据后,得到的是一个字符串,在软件中再对字符串进行操作和判断,就可以实现各种指令控制的功能了

3、优缺点

(1)HEX数据包优点是传输直接,解析数据非常简单,比较适合一些模块发送原始数据,如使用串口通信的陀螺仪、温湿度传感器。

缺点是灵活性不足、载荷容易与包头包尾重复

(2)文本数据包优点是数据直观易理解、非常灵活,适合一些输入指令进行人机交互的场合,如蓝牙模块常用的AT指令、CNC和3D打印机常用的G代码。

缺点是解析效率低

4、数据包收发流程

对于包头、数据、包尾这3种状态,我们都需要有不同的处理逻辑,所以在程序中需要设计一个能记住不同状态的机制,在不同状态执行不同的操作,同时还要进行状态的合理转移,这种程序设计思维,叫做“状态机”。

状态机使用的基本步骤:先根据项目要求定义状态,画几个圈,然后考虑好各个状态在什么情况下会进行转移,如何转移,画好线和转移条件,最后根据这个图来进行编程。

(1)HEX数据包接收流程

执行流程:

最开始S=0,收到一个数据,进中断,根据S=0,进入第一个状态的程序,判断数据是不是包头FF,如果是FF,则代表收到包头,之后置S=1,退出中断,结束,下次再进中断,根据S=1,就可以进行接收数据的程序了(若第一个状态接收到的不是FF,就证明数据包没有对齐,我们应该等待数据包包头的出现,这是状态仍然是0,下次进中断,就还是判断包头的逻辑,直到出现FF,才能转到下一个状态,之后出现了FF,就可以转移到接收数据的状态了);

这时再接收数据,我们就直接把它存在数组中,另外再用一个变量,记录收了多少个数据,如果没收够4个数据,就一直是接收状态,如果收够了,就置S=2,下次进中断时,就可以进入下一个状态了;

最后一个状态就是等待包头包尾,判断数据是不是FE,若是FE,就置S=0,回到最初的状态,开始下一个轮回(若不是FE,比如数据与包头重复,导致包头位置判断错了,那这个包尾位置就有可能不是FE,这时就可以进入重复等待包尾的状态,直到接收到真正的包尾,这样加入包尾的判断,更能预防因数据和包头重复造成的错误)

(2)文本数据包接收流程

同样也是利用状态机,定义3个状态

第一个状态,等待包头,判断收到的是不是我们规定的@符号,如果收到@,就进入接收状态;

在接收状态下,依次接收数据,同时,这个状态还应该要兼具等待包尾的功能,(因为这是可变包长,我们接收数据的时候,也要时刻监视,是不是收到包尾了,一旦收到包尾了,就结束。这里的逻辑应该是,收到一个数据,判断是不是 \r,如果不是,则正常接收,如果是,则不接收,同时跳到下一个状态,等待包尾 \n。如果只有一个包尾,那么在出现包尾之后,就可以直接回到初始状态了,只需要两个状态)

标签:状态,USART,数据,包尾,串口,包头,接收,数据包
From: https://blog.csdn.net/2403_85143327/article/details/142770843

相关文章

  • 串口使用DMA数据接收和发送
    串口DMA部分在这里我一共分3个部分进行介绍,第一部分介绍什么是DMA第二部分是介绍串口DMA+空闲中断实现不定长数据的收发。第三部分是串口DMA中断实现数据收发。第一部分DMA介绍一、基本概念DMA是直接寄存器,这是指一种高速的数据传输操作,允许在外部设备和存储器和寄存器......
  • 数据包远程传输的抓包系统scratch
     数据包抓包过程可以通过工具使用完成。数据包dataparagram通过计算机的传输控制协议TCP进行远程传输。数据的传输控制协议对数据包分割,严格约束之后存放传输。点对点的传输称为TCP(Transformcontrolprotocal)传输控制协议。传输控制协议在数据包的开发传输端点到数据包的......
  • 【花雕学编程】Arduino动手做(232)---ESP32-S3 CAM使用模拟量霍尔检测磁场并设定阈值控
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来——小小的......
  • N32L40x基于串口的IAP升级升级速度2Mbps+上位机工具
    1.软件升级流程mcu开机上位机发送0xaa,0xaa,0x55,0x55,通知mcu进入升级状态,在收到该指令后,mcu擦除旧的APP程序,发送进入升级状态的指令,通知上位机进入升级状态擦除完成后进入升级状态,等待上位机发送升级包上位机开始发送数据包mcu接收数据包,并等待一个完成的数据包,每个......
  • 首发!米尔全志T536核心板,17串口4CAN口、四核A55
    在智能制造与物联网技术日新月异的今天,一款集高性能、低功耗、高可靠性于一身的工业级核心板成为了推动产业升级的关键力量。米尔电子向市场推出——国产真工业级四核Cortex-A55米尔全志T536核心板,助力国产真工业级工控板快速发展,为工业自动化、工业控制、机器人等领域提供强大的......
  • 转串口国产GP232RL兼容FT232RL芯片SSOP28 动能世纪
    基本功能FT232RL为接口转换芯片,可以实现USB到串行UART接口的转换,也可转换到同步、异步Bit-Bang接口模式。基本参数FT232RL,采用SSOP封装方式。基本功能:FT232RL为接口转换芯片,可以实现USB到串行UART接口的转换,也可转换到同步、异步Bit-Bang接口模式。基本参数:FT232RLFT232FTDI......
  • linux串口(epoll)
    void*thread_basedata(void*arg){inti,ret;//Allocatememoryforreadbuffer,setsizeaccordingtoyourneedsunsignedcharread_buf[DATA_LEN];//Normallyyouwouldn'tdothismemset()call,butsincewewilljustreceive......
  • - 串口通信
    USART串口通信目录USART串口通信回顾USART串口通信1、通信分类与作用2、串口通信的相关参数(重点)3、位协议层--RS232协议4、STM32F103中的串口外设5、调试串口编程--(1)串口初始化:时钟、IO、外设--(2)串口发送--(3)串口接收--补充--应用6、中断usart.c完整代......
  • 计算机网络如何保护数据包的
    计算机网络通过多种技术和策略来保护数据包,确保其在传输过程中的机密性、完整性和可用性。以下是一些关键的保护措施:一、加密技术传输层加密:SSL/TLS:用于保护Web流量,确保浏览器和服务器之间的通信安全。SSH:用于安全的远程登录和命令执行。网络层加密:IPsec:提供端到端的......
  • wireshark抓不到TLS1.3数据包中证书的解决方案
    近日工作中遇到需要分析使用TLS1.3协议进行通信的数据包的情况,但使用wireshark进行分析发现不能抓到服务端证书,感到诧异遂设法解决这篇博客给出解决方案,和简单的原理分析解决方案:第一步:在任意合适路径新建一文件,命名为“ssl.log”我这里新建了一个记事本文件,不需要对文件进行......