UART 和 USART 有什么区别?
更新时间:2026-09-21。问题驱动短答页。UART 波特率/FIFO/溢出见 UART 波特率与 FIFO,自动波特率见 波特率自适应,硬件流控见 RTS/CTS。
一句话回答
UART 只能异步通信:只有 TX/RX,收发双方各自用本地时钟、靠事先约定的波特率和起始/停止位对齐;USART 既能做这种异步通信,也能做同步通信(额外提供 SCK 时钟线),还往往支持智能卡、IrDA 等模式。 实践中 USART 是超集,把它当 UART 用是常态。
对照
| 维度 | UART | USART |
|---|---|---|
| 工作方式 | 仅异步 | 异步 + 同步 |
| 时钟 | 无共享时钟,靠波特率约定 | 同步模式可输出/输入 SCK |
| 引脚 | TX/RX(+可选 RTS/CTS) | TX/RX + SCK(同步时) |
| 帧 | 起始位+数据+校验+停止位 | 异步帧同 UART;同步按时钟移位 |
| 典型用途 | 调试串口、模块通信 | 同左,外加智能卡等 |
异步为什么要约定波特率
没有共享时钟,接收端用自己的过采样时钟在每一位中间采样,靠起始位的下降沿对齐。两边波特率偏差过大就会在一帧内累积错位、采样出错,见 波特率与 FIFO 溢出。
实践建议
- 板子上的 TTL 调试串口、和 GPS/Wi-Fi 模块通信:异步即可,USART 外设配置成异步模式当 UART 用。
- 真用到同步模式或智能卡/红外外设时才需要 USART 的额外能力。
- 高速、怕丢数可开 RTS/CTS 硬件流控,见 RTS/CTS 流控。
常见坑
- 两边波特率/数据位/校验/停止位不一致:乱码。
- 把 TTL 电平直接当 RS232:电平不同,需电平转换芯片。
- TX/RX 交叉接反或不共地:完全不通。
- 以为有 USART 就必须接时钟:异步模式不需要 SCK。
- 不开流控又高速连续发:FIFO 溢出丢字节。
总结
UART 是纯异步串口,靠 TX/RX 和双方约定的波特率、起始停止位对齐,没有共享时钟;USART 是其超集,既能异步也能通过额外 SCK 做同步通信并支持智能卡/IrDA,但绝大多数调试串口和模块通信都把 USART 配成异步当 UART 用;真正要保证可靠是对齐波特率帧格式、TX/RX 交叉共地、必要时开 RTS/CTS 流控防 FIFO 溢出。