使用的模板时硬汉的modbus rtu的从站代码。硬件环境GD32F303,使用485通信。
问题描述:在115200波特率下,接收代码的时候,会产生数据丢失的现象,基本2-3次会出现一次。在9600波特率下数据直接被打断,数据没有接收完成就会触发定时器,导致接收完成。
分析结果:在定时器设置时,定时器设置最大的计数值为2000,会导致计数溢出,比较通道的定时器中断直接被触发,导致数据不能正常接收。
解决方案:将定时器的计数上限改为最大值。疑问:在最大值的情况下,长时间运行的话也有可能产设在计数到上限附近的时候,也会产生溢出。
尴尬,写的时候有想到了,因为定义的时16bit的变量,所以变量和计数值会同步溢出。