OpenEdv-开源电子网

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

新人求教,modbus协议如何使用定时器接收数据,求思路

[复制链接]

3

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2021-1-11
在线时间
9 小时
发表于 2021-1-11 18:31:58 | 显示全部楼层 |阅读模式
新人求教,modbus协议如何使用定时器接收数据,求思路
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

1155

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7464
金钱
7464
注册时间
2015-1-15
在线时间
1368 小时
发表于 2021-1-11 20:38:29 | 显示全部楼层
论坛上多的是,随便搜索下就可以有
一分耕耘一分收获。
回复 支持 反对

使用道具 举报

3

主题

821

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3369
金钱
3369
注册时间
2011-11-10
在线时间
207 小时
发表于 2021-1-11 21:54:02 | 显示全部楼层
modbus协议和定时器没关系的,打开串口自动收就行了,也可以开串口DMA收。
回复 支持 反对

使用道具 举报

3

主题

2178

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3323
金钱
3323
注册时间
2013-7-19
在线时间
195 小时
发表于 2021-1-12 12:37:47 | 显示全部楼层
定时器在MODBUS从设备里面只是为了判断帧间隔。
回复 支持 反对

使用道具 举报

3

主题

821

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3369
金钱
3369
注册时间
2011-11-10
在线时间
207 小时
发表于 2021-1-12 17:55:37 | 显示全部楼层
你判断帧间隔是要区分数据是一帧还是两帧是吧?由帧头帧长度就能识别出来了。如果你只是想计时两帧之间时间差,在systick中断里加一个计数变量即可。
回复 支持 反对

使用道具 举报

3

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2021-1-11
在线时间
9 小时
 楼主| 发表于 2021-1-13 08:57:14 | 显示全部楼层
ricefat 发表于 2021-1-12 12:37
定时器在MODBUS从设备里面只是为了判断帧间隔。

是的,不过怎么判断是帧出错了还是 是帧间隔呢
回复 支持 反对

使用道具 举报

3

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2021-1-11
在线时间
9 小时
 楼主| 发表于 2021-1-13 08:58:04 | 显示全部楼层
yklstudent 发表于 2021-1-11 20:38
论坛上多的是,随便搜索下就可以有

谢谢大神,我先去找找
回复 支持 反对

使用道具 举报

3

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2021-1-11
在线时间
9 小时
 楼主| 发表于 2021-1-13 08:58:44 | 显示全部楼层
c2007s 发表于 2021-1-11 21:54
modbus协议和定时器没关系的,打开串口自动收就行了,也可以开串口DMA收。

那通过什么判断帧头帧尾呢,设置标志吗
回复 支持 反对

使用道具 举报

3

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2021-1-11
在线时间
9 小时
 楼主| 发表于 2021-1-13 09:05:58 | 显示全部楼层
c2007s 发表于 2021-1-12 17:55
你判断帧间隔是要区分数据是一帧还是两帧是吧?由帧头帧长度就能识别出来了。如果你只是想计时两帧之间时间 ...

是的,还有出错的情况,我之前用的是帧头帧长度判断帧是否接收完毕,后来看到modbus里面有个帧间隔3.5t,网上说可以用定时器判断,自己尝试区写了下,在区分数据帧结束和帧错误这里没想明白怎么弄
回复 支持 反对

使用道具 举报

18

主题

151

帖子

0

精华

高级会员

Rank: 4

积分
508
金钱
508
注册时间
2020-4-22
在线时间
241 小时
发表于 2021-1-13 09:17:53 | 显示全部楼层
yigecainiao 发表于 2021-1-13 09:05
是的,还有出错的情况,我之前用的是帧头帧长度判断帧是否接收完毕,后来看到modbus里面有个帧间隔3.5t, ...

定时器应该只是区分帧结束,然后自己写处理程序,判断起始寄存器地址,寄存器长度,还有数据帧长度对不对,不过我都是直接CRC校验,不去判断帧长度,CRC不对就直接报错。
回复 支持 反对

使用道具 举报

3

主题

2178

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3323
金钱
3323
注册时间
2013-7-19
在线时间
195 小时
发表于 2021-1-14 10:20:51 | 显示全部楼层
yigecainiao 发表于 2021-1-13 08:57
是的,不过怎么判断是帧出错了还是 是帧间隔呢

找找freemodbus程序包,里面有相关的判断机制,移植即可
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-14 15:30

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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