使用030的USART提供modbus通信。内部8Mhz时钟,波特率9600,数据格式8N1,其余配置均使用默认模式。在发送和接受是打开并关闭TXEIE或RXNEIE。
问题:在温度-20到70度,100ms间隔通信100次,最大失败小于5次。低于-20度后,100ms间隔通信100次,失败高达80多次,结果令人困惑。
问题改善(没有完全解决,始终是一个隐患):修改配置,将OVER8置位,100ms间隔通信100次,失败次数降到10~20次。但是根据23.4.5节USART接受对时钟容忍度(误差)描述。
OVER8 = 0, ONEBIT = 0, 误差容忍度为3.33%, OVER8 = 1,误差容忍度为2%,明显降低了,但是结果效率却提高了,百思不得其解。
因此为了提高效率,OVER8 = 1,将 ONEBIT 置位,usart误差应该2%提高到3% .但是发现USART无法通信。啊,真是不明白,希望得到大家帮助。
主要问题:1、温度影响串口效率,这一点030的HSI提到了(25度是1%误差,低温下为5%),但是示波器看是接受时序对不上。
2、关于23.4.5节USART接受对时钟容忍度,难以理解。
邮箱,daizhunsheng@163.com。
|