STM32H750 在做串口通信时,接收出现异常
工作条件:
STM32H750做MODBUS主站, 通信波特率9600,8,N,1;
某仪表做从站通信,通信9600,8,N,1, 实际工作波特率9700.
主站发送数据 01 03 00 00 00 02 C4 0B
从站正常应答 01 03 04 02 B9 01 40 2A 0E; 实际应答时,在最后一个字节的停止位后紧跟一个7us 左右的下拉电平,使得主站对其最后一个字符识别错误,
正确字符为16#0E即二进制的2#00001110 ;实际H750接收进来后,识别为2#10000111,即16#87,因此引起CRC校验错误。
由于需要适配的仪表种类各有不同,都需要考虑做良好适配,暂时考虑从H750这边着手结局此问题(使用103或其它品牌的M4 的MCU均未发现会引起接收异常)。
通过做接收中断标识,发现H750在波特率匹配或H750的通信时钟更高时,接收字符中断可以立即产生或提前产生, 而在H750波特率相比从站的通信时钟更慢时(1个字节慢的时间不超过3/16 位);接收字符中断将滞后产生,(滞后约3/16+5/16 =8/16)。 此时由于产生滞后字符中断,在非最末字节时候,数据都比较正常; 而在最末数据,由于在字符中断还未产生的时候,又出现了一个异常的短的下降沿,使得应该为正常的数据被移了一位,由此产生接收异常。
仪表方面的最后一个脉冲的出现,可能是由于采用了一种收发自动切换的电路而引起的此类现象。有发现过此类问题的进来探讨一下解决方案。 |