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