UART 与 USART 中的波特率、停止位、数据位、起始位、CK 作用详解嵌入式 裸机RTOS开发杂谈系列 第六章UART 与 USART 中的波特率、停止位、数据位、起始位、CK 作用详解UART 和 USART 都用于串行通信但它们对齐数据帧的方式不同UART 只支持异步模式USART 既支持异步模式也支持同步模式。异步模式通信靠起始位、波特率、数据位、停止位来对齐同步模式通信靠CK 时钟线来对齐。1. 波特率异步模式下每一位的“节拍”波特率表示每秒传输多少个码元。在常见 UART/USART 异步串口里一个码元通常对应一位所以波特率可以理解为“每秒传输多少位”。常见波特率有9600192003840057600115200230400460800921600波特率的作用是规定每一位持续多长时间。例如 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 最关键的区别。异步模式为什么需要起始位和波特率异步模式没有共享时钟线接收端不知道发送端什么时候开始发数据也不知道每一位持续多久。所以它必须依赖三件事起始位提供帧头让接收端知道“现在开始采样了”。波特率让接收端按约定节奏推算每一位的位置。停止位标记帧结束并让总线恢复高电平便于检测下一帧起始位。但这种方式有一个问题接收端只在起始位处对齐一次后面每一位都靠本地时钟推算。如果两端时钟有偏差采样点会逐渐漂移帧越长越容易出错。同步模式为什么不需要起始位和波特率同步模式下CK 时钟线把发送端和接收端的采样节奏直接绑在一起。发送端每输出一个数据位CK 就会给出一个对应的时钟边沿接收端不需要猜测位边界只需要在指定时钟边沿采样每一位的起止位置都由 CK 明确给出而不是由波特率推算数据可以连续传输不需要每字节都插入起始位和停止位。因此CK 能替代起始位和波特率是因为它把“时间基准”从 各自本地时钟 约定波特率 变成了 共享时钟边沿。更直白地说起始位解决的是“什么时候开始采”的问题波特率解决的是“每隔多久采一次”的问题CK则同时解决了这两个问题时钟边沿既告诉接收端现在采也规定了下一次采的时间点。所以同步模式下数据帧不再依赖起始位和停止位做逐位对齐传输效率更高时序也更严格。7. 异步模式与同步模式对比对比项 UART / USART 异步模式 USART 同步模式时钟线 无 有 CK/SCK同步方式 起始位 波特率 CK 时钟边沿起始位 必须有 通常不需要停止位 必须有 通常不需要波特率 必须一致且误差小 不依赖波特率对齐传输效率 每字节有起始位/停止位开销 数据可连续传输效率更高典型场景 调试串口、蓝牙、GPS、WiFi 模块 高速外设、芯片间同步通信8. 工程上如何理解这五个参数可以这样记波特率异步模式下规定每一位有多长。起始位异步模式下告诉接收端帧从哪里开始。数据位承载实际数据。停止位异步模式下告诉接收端帧到哪里结束。CK同步模式下用共享时钟边沿直接规定每一位的采样时刻。9. 一句话总结UART/USART 异步模式靠起始位找帧头、靠波特率推算每一位、靠停止位结束帧USART 同步模式则用 CK 时钟线提供共享采样节拍接收端直接沿时钟边沿采样因此不再依赖起始位和波特率来完成位级对齐。