打印
[麦麦茶水间]

【每周分享】串口通信协议中的停止位究竟有什么作用?

[复制链接]
363|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dffzh|  楼主 | 2025-7-17 17:00 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
串口(UART/USART)通信协议中,我们会经常遇到停止位(Stop Bit)的概念,也就是串口初始化代码配置或者串口助手配置时,一般都需要对停止位进行设置,我们可能很少关注这个参数,一般情况下配置为1个停止位就可以。 那这个停止位到底有什么作用呢?怎么配置比较合理呢?本文给大家解释一下。
说到底,停止位的主要作用其实就是标志一个串口数据帧的结束,并为接收方提供时间同步的缓冲时间,并且停止位的不同设置(通常为0.5、1、1.5或者2位,如下图为某个MCU的串口外设库定义)也会影响串口通信的可靠性和兼容性,下面从六个方面展开说下。
1. 时钟同步与帧界定
作用:
停止位帮助接收方明确当前数据帧的结束位置; 由于异步串口通信(UART)没有独立的时钟信号,接收方依赖起始位和停止位来同步时钟。
选择影响:
较长的停止位(如2位):
提供更多时间让接收方调整时钟同步,适合高波特率或长距离传输(可能因线路噪声导致信号失真);
较短的停止位(如1位):
节省带宽,适合高吞吐量场景(如短距离、低噪声环境)。
2. 抗干扰能力
作用:
停止位的长度可以抵消信号传输中的延迟或抖动(如线路电容、电磁干扰)。
选择影响:
在噪声较大的环境中,1.5或2位停止位能降低接收方误判下一帧起始位的概率;
在稳定环境中,0.5或1位停止位足以满足需求。
3. 效率与吞吐量
计算示例(假设8数据位+1校验位):
1位停止位:每帧10位(8+1+1),效率90%。
2位停止位:每帧11位(8+1+2),效率81.8%。
影响:
停止位越长,有效数据占比越低,但对低速通信影响较小。
4. 历史与设备兼容性
早期设备:
某些老式设备可能要求1.5或2位停止位,以匹配其机械响应速度;
现代标准:
大多数现代设备默认使用1位停止位,但需根据对接设备的协议要求调整(例如某些工业设备可能固定使用2位)。
5. 常见应用场景
0.5位停止位:
目前来说,应用较少吧;
1位停止位:
最常用,适用于大多数场景(如PC串口、单片机通信)。
1.5/2位停止位:
用于特定设备或高噪声环境(如工业RS-485网络)。
6. 配置建议
默认选择:优先使用1位停止位,除非协议或设备明确要求其他值;
调试技巧:若通信出现误码,可尝试增加停止位长度或降低波特率;
标准匹配:确保发送方和接收方的停止位设置完全一致,否则会导致帧错误。

综上所述,停止位的选择本质是可靠性与效率的权衡:较长的停止位增强容错性,较短的停止位提升传输速率,需根据实际场景和硬件要求决定。

使用特权

评论回复
沙发
wahahaheihei| | 2025-7-19 18:22 | 只看该作者
分割通信帧啊,降低误码率的影响啊。

使用特权

评论回复
板凳
wahahaheihei| | 2025-7-19 18:23 | 只看该作者
在串口通信协议中,停止位是一个至关重要的组成部分,它的主要作用体现在以下几个方面:

标志字符结束:

这是停止位最核心的功能。它告诉接收方:“当前传输的这个字符(字节)已经结束了”。

在起始位(一个低电平)之后,数据位(5-9位)被传输,接收方需要知道数据位在哪里停止,以便正确地解析出这个字符的值。停止位提供了一个明确的结束信号。

提供接收方处理时间:

在接收完一个字符的数据位后,接收方的硬件(UART)需要时间将接收到的数据位移位到其内部寄存器中,并进行一些基本的处理(如奇偶校验检查)。

停止位(通常1位、1.5位或2位的时间长度)为接收方提供了这段必要的“喘息”时间,使其能在下一个起始位到来之前完成当前字符的处理,并为接收下一个字符做好准备。

保持发送方和接收方的同步:

虽然起始位用于在字符级别重新同步双方的时钟(每个字符开始时重新对齐一次),但在一个字符内部传输多个数据位的过程中,发送方和接收方的本地时钟可能存在微小的误差(时钟漂移)。

停止位提供了一个固定的、已知长度的空闲期(高电平)。这有助于接收方在字符边界处重新校准其内部时钟,确保在下一个起始位下降沿到来时能更准确地采样,从而维持整体通信的同步。它就像一个“重置点”,让双方在下一个字符开始前重新对齐。

确保线路恢复到空闲状态:

串口通信的线路在空闲时通常保持高电平(标记状态)。起始位是一个低电平(空号状态),数据位紧随其后。

停止位(一个高电平)强制线路在字符传输结束后返回到空闲的高电平状态。这为下一个起始位的下降沿(从高到低的跳变)提供了一个清晰、无歧义的起始信号。如果前一个字符的传输没有以高电平结束,下一个起始位的下降沿就可能无法被可靠地检测到。

总结来说:

使用特权

评论回复
地板
wahahaheihei| | 2025-7-19 18:23 | 只看该作者
停止位扮演着字符终止符、接收方缓冲时间提供者和同步维护者的角色。它通过在字符末尾发送一个固定长度的高电平信号,明确告知接收方该字符已传输完毕,给接收方留出处理当前字符的时间,帮助接收方在字符边界处维持与发送方的同步,并确保通信线路在字符间恢复到空闲状态(高电平),为下一个字符的起始位做好铺垫。

使用特权

评论回复
5
wahahaheihei| | 2025-7-19 18:24 | 只看该作者
关键点:

长度: 常见的停止位长度是1位(最常见)、1.5位(较少见,用于某些早期设备或特定协议)或2位(用于增加接收方的处理时间裕量或在高噪声环境中提供更长的空闲恢复期)。

电平: 停止位始终是高电平。

非数据: 停止位本身不携带任何数据信息,它是协议开销的一部分。

与起始位相对: 起始位(低电平)标志字符开始,停止位(高电平)标志字符结束。

没有停止位,接收方将无法可靠地区分一个字符的结束和下一个字符的开始,也无法获得必要的处理时间,最终会导致通信错误和数据的错位。它是异步串行通信可靠工作的基石之一。

使用特权

评论回复
评论
dffzh 2025-7-21 08:59 回复TA
感谢如此详细的回复。 
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

84

主题

1018

帖子

16

粉丝