问题描述
最近在做的项目,基于modbusRTU,上位机通过wifi模块给单片机发数据。
上位机每隔100ms,周期性发送0x03和0x10。
因为要及时的处理上位机发来的指令,我是在一个10ms的定时器中断中进行modbus数据处理。这就导致一个问题:0x10一次性设置好多寄存器数据,经常会出现串口接收数据还没完,就被定时器中断打断了,也引起单片机中数据更新错误。
解决方法
现在的解决方法是:计算出发送一次0x10的数据需要多少时间,定时器的时间比这个设置的长一点。在串口中断中接收到第一个数据时,开启定时器;在定时器中断中关闭定时器。
这样可以保证串口数据接收过程中不会受到定时器中断的影响。
先写这么多,明天再补充完整 。