ESP32C3开发——UART接收数据处理方法

13 篇文章 5 订阅
2 篇文章 0 订阅


前言

UART外设是一种双向、串行、异步的通信总线,可以接收和发送数据。本次主要记录我在串口开发中对接收数据(主要针对小的指令包数据,大数据透传不涉及)的几种处理方式的心得和总结,适用于嵌入式设备开发。


一、移位法

指针移位法:将串口接收的所有数据都放在一个独立的内存空间进行缓存,在数据处理函数中通过指针一个字节一个字节移位的方式将数据提取出来组合成完整的数据包后进行指令的处理。主要应用于有固定的数据包格式的指令控制场景,比如迪文串口屏开发、部分语音识别模块和自己定义了固定的数据格式的交互。

1.设计流程图

在这里插入图片描述

2.代码示例

2.1STM32系列

串口服务函数
在这里插入图片描述
数据包判定
在这里插入图片描述
在任务函数中调用数据包处理函数
在这里插入图片描述

2.2ESP32C3

在串口事件任务函数中循环缓存接收数据
在这里插入图片描述
数据包判定函数
在这里插入图片描述
函数调用和串口任务函数
在这里插入图片描述
在这里插入图片描述

二、定时法

定时法:使用定时器定时一定时间一般是3-6ms,即3-6ms后都没有接收到数据后就表示一包数据接收完成,再将接收到的数据缓存到其他存在存空间进行分析处理,这种方式不需要固定数据包的格式,适用于一问一答场景。

1.代码示例

相关数据结构的定义:
在这里插入图片描述
串口中断服务函数:
在这里插入图片描述
查询接收是否超时(定时器中断中调用):
在这里插入图片描述
定时器中断:
在这里插入图片描述
最后根据需要来解析数据包,解析完成后要清除接收缓存和接收标志位。
在这里插入图片描述
在任务函数中调用处理函数:
在这里插入图片描述

三、格式判断法

格式判断法:直接在串口数据接收中断中判定每个字节的值,将字节组合后是否符合既定的数据包格式,如格式无误则表示数据包接收完成。数据包格式的格式必须固定,适用于一问一答场景。

1.代码示例

串口中断服务程序:
在这里插入图片描述
数据包解析函数:判断接收一包数据完成,解析完成后要清除相关变量
在这里插入图片描述
在任务函数中调用:
在这里插入图片描述

总结

以上就是本次总结的相关串口的内容,本文介绍了串口数据的三种处理方式,我们可以根据使用场景选择合适的数据处理方法。

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值