使用的模板時硬漢的modbus rtu的從站代碼。硬件環境GD32F303,使用485通信。
問題描述:在115200波特率下,接收代碼的時候,會產生數據丟失的現象,基本2-3次會出現一次。在9600波特率下數據直接被打斷,數據沒有接收完成就會觸發定時器,導致接收完成。
分析結果:在定時器設置時,定時器設置最大的計數值為2000,會導致計數溢出,比較通道的定時器中斷直接被觸發,導致數據不能正常接收。
解決方案:將定時器的計數上限改為最大值。疑問:在最大值的情況下,長時間運行的話也有可能產設在計數到上限附近的時候,也會產生溢出。
尷尬,寫的時候有想到了,因為定義的時16bit的變量,所以變量和計數值會同步溢出。