OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4902|回复: 3

根据协议实现串口通信状态机

[复制链接]

3

主题

6

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2022-5-9
在线时间
6 小时
发表于 2022-8-4 11:17:39 | 显示全部楼层 |阅读模式
5金钱
本帖最后由 桃桃 于 2022-8-4 15:43 编辑

最近需要用到串口状态机,百度了一篇文章,有一些看不懂,特来请教大佬.这个是我百度的帖子:
(36条消息) 串口状态机,这东西很好用啊_dxmcu的博客-CSDN博客_串口 状态机


我不懂的地方:
宏定义后面  的值是按照协议定义的还是怎么定义的,如果是按照协议定义的,是按照字节?如果我的报头定义2字节,报尾也定义两字节
  • 就会报错



  • #define DATA_HEAD  3


  • #define DATA_LEN   4


  • #define DATA_COM   5


  • #define DATA_NUM   6


  • #define DATA_CRC   7


  • #define DATA_TAIL  8


  • #define DATA_ADD   9


e96df0c163ceba1341c5c580dc3b49e.png

我写的代码

我写的代码

协议

协议

最佳答案

查看完整内容[请看2#楼]

把宏定义展开代入程序中就能看懂了,这些只是值,给g_uart_state用的,并非字节数。 报头定义2字节,不是改宏定义就行的,还要改switch语句里面,添加一个状态, 且要处理好状态在什么条件下进入下一状态。如: switch(g_uart_state) { case 报头1: break; case 报头2: break;
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

12

主题

3387

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8627
金钱
8627
注册时间
2020-5-11
在线时间
4059 小时
发表于 2022-8-4 11:17:40 | 显示全部楼层
把宏定义展开代入程序中就能看懂了,这些只是值,给g_uart_state用的,并非字节数。
报头定义2字节,不是改宏定义就行的,还要改switch语句里面,添加一个状态,
且要处理好状态在什么条件下进入下一状态。如:
switch(g_uart_state)
{
case 报头1: break;
case 报头2: break;
专治疑难杂症
回复

使用道具 举报

3

主题

6

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2022-5-9
在线时间
6 小时
 楼主| 发表于 2022-8-4 15:14:23 | 显示全部楼层
LcwSwust 发表于 2022-8-4 13:57
把宏定义展开代入程序中就能看懂了,这些只是值,给g_uart_state用的,并非字节数。
报头定义2字节,不是 ...

哦哦,谢谢,我把我写的代码发了一下,能帮我看看对不对吗
回复

使用道具 举报

13

主题

40

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
395
金钱
395
注册时间
2021-3-6
在线时间
116 小时
发表于 2022-8-5 08:45:16 | 显示全部楼层
这种协议解析只能解析固定协议,如果是固定协议个人感觉结构体+共用体感觉比较好使,https://mp.weixin.qq.com/s/-xFeb9w6DCTaWFMD863Tyg
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-8 15:59

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表