串口通信.停止位时间长度可以小于协议规定吗?

2019-07-15 22:59发布

串口通信中,如果不需要校验位的话,一般格式是:1bit起始位+8bit数据位+1bit停止位。
现在A 和 B按照串口规定的波特率进行通信,假设是9600,且 A是发送,B是接受。


B采用9600的16倍时钟去采样。由于是异步通信,且时钟也不是完全精确的。B的接收可能存在偏移。

请问这种偏移是否是累加的?即A连续发送,上一轮的停止位刚发送完,立刻发送下一轮的起始位。在这样反复发送了非常多轮后,累计起来的误差是否会导致B接收数据错误?

如果B在接收数据时,到接收停止位的时候,并不完全持续一个停止位的时间长度,而是提前就进入等待下一轮起始位的状态,这样做符合通用的做法吗?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
7条回答
小梅哥
2019-07-16 15:41
月亮下的蛋 发表于 2016-3-20 17:32
应用的情景是A连续发送。发完上一轮的停止位立刻发下一轮的起始位。起始位的检测是独立的。作为接收方B来说,检测每一位的时间t0(t0 = 1/9600)是固定的。假设t0是精确的。
所以B的一次完整接收周期是t0*(1+8+1)。假设A连续发送,如果B检测到有数据的时间滞后了t_delay时间,则每一轮检测都滞后t_delay。
这样不会有错。累 ...

说的有道理。所以uart协议中还存在1.5个停止位和2个停止位的模式

一周热门 更多>