硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1657|回复: 2
收起左侧

[有问必答] 关于使用modbus rtu时,数据接收时对数据的问题。

[复制链接]

3

主题

8

回帖

17

积分

新手上路

积分
17
发表于 2022-3-9 14:24:05 | 显示全部楼层 |阅读模式
使用的模板时硬汉的modbus rtu的从站代码。硬件环境GD32F303,使用485通信。
问题描述:在115200波特率下,接收代码的时候,会产生数据丢失的现象,基本2-3次会出现一次。在9600波特率下数据直接被打断,数据没有接收完成就会触发定时器,导致接收完成。

分析结果:在定时器设置时,定时器设置最大的计数值为2000,会导致计数溢出,比较通道的定时器中断直接被触发,导致数据不能正常接收。
解决方案:将定时器的计数上限改为最大值。
疑问:在最大值的情况下,长时间运行的话也有可能产设在计数到上限附近的时候,也会产生溢出。
尴尬,写的时候有想到了,因为定义的时16bit的变量,所以变量和计数值会同步溢出。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117546
QQ
发表于 2022-3-9 16:38:10 | 显示全部楼层
注意STM32跟GD32的不同,STM32的那个TIM2和TIM5是32bit定时器,使用的时候要注意下。而使用TIM3和TIM4是16bit的
回复

使用道具 举报

3

主题

8

回帖

17

积分

新手上路

积分
17
 楼主| 发表于 2022-3-11 08:34:56 | 显示全部楼层
eric2013 发表于 2022-3-9 16:38
注意STM32跟GD32的不同,STM32的那个TIM2和TIM5是32bit定时器,使用的时候要注意下。而使用TIM3和TIM4是16b ...

确实,我原来移植的时候用的是f1的例程里面的代码做的移植,查了一下手册,确实位数不一样。
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-14 01:50 , Processed in 0.035031 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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