OpenEdv-开源电子网

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

MODBUS数据字节间隔超过1s舍弃,这个功能怎样实现

[复制链接]

1

主题

5

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2018-9-21
在线时间
1 小时
发表于 2018-9-21 10:18:49 | 显示全部楼层 |阅读模式
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

40

主题

259

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
459
金钱
459
注册时间
2016-5-19
在线时间
192 小时
发表于 2018-9-21 10:28:44 | 显示全部楼层
设置一个超时寄存器数组RxBuffer_Timeout【】在定时器里自加,当超出RxBuffer_Timeout【】>设定的时间,数据清零,返回重新开始接受
回复

使用道具 举报

1

主题

882

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3071
金钱
3071
注册时间
2018-2-7
在线时间
285 小时
发表于 2018-9-21 11:44:24 | 显示全部楼层
每接收一个字节计时器清零,当计时器的值超过1s时,说明1s内未接到任何数据,进行超时处理。
回复

使用道具 举报

24

主题

106

帖子

0

精华

高级会员

Rank: 4

积分
637
金钱
637
注册时间
2018-7-13
在线时间
197 小时
发表于 2018-9-21 14:53:03 | 显示全部楼层
本帖最后由 不學會32不改名 于 2018-9-21 14:59 编辑

1:滴答定时器 1ms中断一次。做一个时间标志的加或者减的操作,如果串口收到数据就重置这个时间标志,如果超过1S(999次中断)  置为接收完成标志。处理完数据重置这个标志
2:根据波特率计算出字节间的时间。用滴答定时器 1ms中断一次,中断里面做一个时间戳+1(这个东西很有用,可以做很多事情) ,然后收到数据,就把当前的时间戳值赋值给一个变量。当时间戳减去变量的值>波特率算出的时间,就判断为一帧接收完成。
回复

使用道具 举报

0

主题

4

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2018-9-21
在线时间
0 小时
发表于 2018-9-21 15:14:17 | 显示全部楼层
方法太多了
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-19 22:30

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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