前言
UART外设是一种双向、串行、异步的通信总线,可以接收和发送数据。本次主要记录我在串口开发中对接收数据(主要针对小的指令包数据,大数据透传不涉及)的几种处理方式的心得和总结,适用于嵌入式设备开发。
一、移位法
指针移位法:将串口接收的所有数据都放在一个独立的内存空间进行缓存,在数据处理函数中通过指针一个字节一个字节移位的方式将数据提取出来组合成完整的数据包后进行指令的处理。主要应用于有固定的数据包格式的指令控制场景,比如迪文串口屏开发、部分语音识别模块和自己定义了固定的数据格式的交互。
1.设计流程图
2.代码示例
2.1STM32系列
串口服务函数
数据包判定
在任务函数中调用数据包处理函数
2.2ESP32C3
在串口事件任务函数中循环缓存接收数据
数据包判定函数
函数调用和串口任务函数
二、定时法
定时法:使用定时器定时一定时间一般是3-6ms,即3-6ms后都没有接收到数据后就表示一包数据接收完成,再将接收到的数据缓存到其他存在存空间进行分析处理,这种方式不需要固定数据包的格式,适用于一问一答场景。
1.代码示例
相关数据结构的定义:
串口中断服务函数:
查询接收是否超时(定时器中断中调用):
定时器中断:
最后根据需要来解析数据包,解析完成后要清除接收缓存和接收标志位。
在任务函数中调用处理函数:
三、格式判断法
格式判断法:直接在串口数据接收中断中判定每个字节的值,将字节组合后是否符合既定的数据包格式,如格式无误则表示数据包接收完成。数据包格式的格式必须固定,适用于一问一答场景。
1.代码示例
串口中断服务程序:
数据包解析函数:判断接收一包数据完成,解析完成后要清除相关变量
在任务函数中调用:
总结
以上就是本次总结的相关串口的内容,本文介绍了串口数据的三种处理方式,我们可以根据使用场景选择合适的数据处理方法。