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