ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

UART 与 USART 中的波特率、停止位、数据位、起始位、CK 作用详解

UART 与 USART 中的波特率、停止位、数据位、起始位、CK 作用详解

UART 与 USART 中的波特率、停止位、数据位、起始位、CK 作用详解

嵌入式 裸机&RTOS开发杂谈系列 第六章

UART 与 USART 中的波特率、停止位、数据位、起始位、CK 作用详解

UART 和 USART 都用于串行通信,但它们对齐数据帧的方式不同:UART 只支持异步模式,USART 既支持异步模式,也支持同步模式。

  • 异步模式:通信靠起始位、波特率、数据位、停止位来对齐;
  • 同步模式:通信靠CK 时钟线来对齐。

1. 波特率:异步模式下每一位的“节拍”

波特率表示每秒传输多少个码元。在常见 UART/USART 异步串口里,一个码元通常对应一位,所以波特率可以理解为“每秒传输多少位”。

常见波特率有:

  • 9600
  • 19200
  • 38400
  • 57600
  • 115200
  • 230400
  • 460800
  • 921600

波特率的作用是规定每一位持续多长时间。例如 115200 bps 时,一位大约持续:

1 / 115200 ≈ 8.68 μs

异步模式下没有共享时钟线,收发双方必须预先约定相同的波特率。如果两端波特率偏差过大,接收端采样位置会逐渐偏离位中心,导致乱码或帧错误。通常要求累计误差控制在较小范围内,工程上常以 ±2%~3% 作为较稳妥目标。

2. 起始位:异步帧的“帧头”

起始位用来告诉接收端:一帧数据开始了。

UART/USART 异步模式下,总线空闲时通常保持高电平。发送端要发送一帧数据时,会先把数据线拉低,这个下降沿就是起始位。

接收端会持续检测数据线是否出现下降沿。检测到后,再通过内部过采样确认这不是噪声。确认起始位后,接收端就以它为基准,按波特率依次采样后面的数据位、校验位和停止位。

所以起始位的作用是:

  • 标记帧开始;
  • 让接收端重新对齐采样位置;
  • 补偿异步通信没有共享时钟带来的时序漂移。

3. 数据位:真正传输的数据内容

数据位是一帧中承载实际数据的部分。

常见数据位长度为:

  • 7 位
  • 8 位
  • 9 位

最常用的是 8 位数据,因为正好对应一个字节。数据位通常低位先发,高位后发。

数据位长度必须收发一致。如果一端配置 8 位,另一端配置 9 位,接收端会把停止位或校验位误认为数据位,导致解析错误。

需要注意的是,UART/USART 的数据位只负责传输原始位流。更上层的帧头、长度、命令字、校验和、帧尾,都需要应用层协议自己定义。

4. 停止位:异步帧的“帧尾”

停止位用来标记一帧结束,并使总线恢复到空闲高电平状态。

常见停止位有:

  • 1 位
  • 1.5 位
  • 2 位

最常用的是 1 位停止位。

停止位的作用包括:

  • 告诉接收端当前帧已经结束;
  • 让总线回到高电平,便于检测下一帧的起始位下降沿;
  • 给接收端留出恢复时间;
  • 在一定程度上吸收波特率误差。

停止位越长,抗误差能力通常越强,但传输效率会下降。

5. CK:同步模式下的共享时钟线

CK 是 USART 同步模式下使用的时钟信号线,也可以称为 SCK、CLK 或 SCLK。

同步模式下,硬件连接通常包括:

  • TX:主机发送数据线;
  • RX:主机接收数据线;
  • CK/SCK:主机输出的时钟线;
  • GND:共地线。

CK 的作用是:由主设备产生时钟,从设备按照时钟边沿采样数据。

也就是说,接收端不再需要猜测“这一位什么时候开始、这一位什么时候结束”,而是直接看 CK 边沿。

同步模式下通常还会配置:

  • CPOL:时钟空闲电平是高还是低;
  • CPHA:在第几个时钟边沿采样数据;
  • Last Bit Clock:最后一个数据位是否输出时钟脉冲。

6. 为什么 CK 能在同步模式下替代起始位和波特率?

这是 UART/USART 最关键的区别。
异步模式为什么需要起始位和波特率?
异步模式没有共享时钟线,接收端不知道发送端什么时候开始发数据,也不知道每一位持续多久。所以它必须依赖三件事:

  1. 起始位:提供帧头,让接收端知道“现在开始采样了”。
  2. 波特率:让接收端按约定节奏推算每一位的位置。
  3. 停止位:标记帧结束,并让总线恢复高电平,便于检测下一帧起始位。

但这种方式有一个问题:接收端只在起始位处对齐一次,后面每一位都靠本地时钟推算。如果两端时钟有偏差,采样点会逐渐漂移,帧越长越容易出错。
同步模式为什么不需要起始位和波特率?
同步模式下,CK 时钟线把发送端和接收端的采样节奏直接绑在一起。
发送端每输出一个数据位,CK 就会给出一个对应的时钟边沿;
接收端不需要猜测位边界,只需要在指定时钟边沿采样;
每一位的起止位置都由 CK 明确给出,而不是由波特率推算;
数据可以连续传输,不需要每字节都插入起始位和停止位。
因此,CK 能替代起始位和波特率,是因为它把“时间基准”从 各自本地时钟 + 约定波特率 变成了 共享时钟边沿。

更直白地说:

  • 起始位解决的是“什么时候开始采”的问题;
  • 波特率解决的是“每隔多久采一次”的问题;
  • CK则同时解决了这两个问题:时钟边沿既告诉接收端现在采,也规定了下一次采的时间点。

所以同步模式下,数据帧不再依赖起始位和停止位做逐位对齐,传输效率更高,时序也更严格。

7. 异步模式与同步模式对比

对比项 UART / USART 异步模式 USART 同步模式
时钟线 无 有 CK/SCK
同步方式 起始位 + 波特率 CK 时钟边沿
起始位 必须有 通常不需要
停止位 必须有 通常不需要
波特率 必须一致且误差小 不依赖波特率对齐
传输效率 每字节有起始位/停止位开销 数据可连续传输,效率更高
典型场景 调试串口、蓝牙、GPS、WiFi 模块 高速外设、芯片间同步通信

8. 工程上如何理解这五个参数

可以这样记:

  1. 波特率:异步模式下,规定每一位有多长。
  2. 起始位:异步模式下,告诉接收端帧从哪里开始。
  3. 数据位:承载实际数据。
  4. 停止位:异步模式下,告诉接收端帧到哪里结束。
  5. CK:同步模式下,用共享时钟边沿直接规定每一位的采样时刻。

9. 一句话总结

UART/USART 异步模式靠起始位找帧头、靠波特率推算每一位、靠停止位结束帧;USART 同步模式则用 CK 时钟线提供共享采样节拍,接收端直接沿时钟边沿采样,因此不再依赖起始位和波特率来完成位级对齐。

返回列表