关于串口波形,以及波特率误差的一点思考

研究STM32的USART的波形过程中,据笔者观察,起始位的电平与总线空闲时电平相反,停止位的电平与数据的最后一位相反,帧间隔是一个位长,紧接在停止位后,电平与停止位相同。

如果异步收发中,通讯双方波特率存在微小误差,那么数据流长到一定程度时,采样就会出现错误。例如双方规定一个位长10us,而发送端实际上一个位长9us,接收端在每个区间的中点采样一次,即5,15,25......设在第x位时,采样到数据位边沿,则有10x-5=9x,所以x=5,即第五位采集到边沿,第六位开始必然出错。即45us就是临界点,55us时的采样就必然产生错位了,原本应该采集到第六位,但实际上采集到了第七位。当然1us的误差对于通讯来说是非常巨大的,现实中不会存在。

再以STM32的USART通信为例,假如双方规定波特率为115200,即一秒传输115200位,位长约8.681us,而发送端实际上一秒发送115226位,位长约8.679us,差别是0.002us,仍旧假设中点采样,由8.681x-4.3405=8.679x,得到x=2170.25,则理论上第2171位开始出错。

注意,上述时间长度是笔者自己四舍五入的,本身存在一定误差。另外,小数点后已经是纳秒级别了,而现实应用中,未必需要考虑这么高的精度,硬件发送和采样可能也达不到如此高的精度,采样方式也未必是简单的区间中点采样。因此,本文的例子只是粗略计算,作为参考。实际传输中,只要硬件连接稳定,这点波特率误差完全是可以忽略不计的。

注:使用逻辑分析仪观察波形时,位长都是9us,也就是说,us已经是普通仪器能观测到的最大精度。

猜你喜欢

转载自blog.csdn.net/WangJianlin3/article/details/85453012