通信设计中考虑协议的灵活性,经常把协议设计成“不定长度”。
一个实例如下图:锐米LoRa终端的通信协议帧。

如果一个系统接收上述“不定长度”的协议帧,将会有一个挑战--如何高效接收与解析。
为简化系统设计,我们强烈建议您采用“状态机”来解析UART数据帧,并且把解析工作放在ISR(中断服务程序)完成,仅当接收到最后一个字节(0x0D)时,再将整个数据帧提交给进程处理。
该解析状态机的原理如下图所示:

那么ISR处理这个状态机来得及吗?答案是:so easy!因为它只有3个动作,运算量十分小:
比较接收数据 -> 更新状态变量 -> 存储接收数据,C语言仅3条语句,翻译成机器指令也不超过10条。
代码清单如下:




审核编辑:刘清
-
单片机
+关注
关注
6074文章
45340浏览量
663493 -
通信协议
+关注
关注
28文章
1073浏览量
41869 -
LoRa技术
+关注
关注
3文章
105浏览量
17278
原文标题:如何设计单片机的通信协议?
文章出处:【微信号:c-stm32,微信公众号:STM32嵌入式开发】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
芯知识|广州唯创电子语音芯片UART通信协议解析:发码长度与校验码计算
HIPERFACE DSL编码器通信协议介绍
Modbus 转 Profinet:工业通信协议的桥梁
Dali通信的工作原理 如何使用Dali通信协议
I2C总线与单片机的连接
基于Vector工具进行CAN协议错误帧的分析实践

如何高效接收与解析单片机的通信协议帧
评论