一、USART/UART 串口协议(嵌入式开发视角)简介
串口协议是嵌入式系统中最常用的异步串行通信协议,核心用于设备间低成本、近距离数据传输,以下是精准且贴合开发实际的核心知识点:
1.1 核心定义与区别(嵌入式场景重点)
1. 缩写含义

- UART :Universal Asynchronous Receiver/Transmitter(通用异步收发器)
- 无时钟线,依赖双方约定的波特率同步,嵌入式中最常用(如 STM32 的 USART 外设可配置为 UART 模式)。
- USART :Universal Synchronous/Asynchronous Receiver/Transmitter(通用同步 / 异步收发器)
- 兼容异步(UART)和同步(需时钟线 SCLK)模式,同步模式可提高传输稳定性(如与 SPI 设备搭配时),但嵌入式中极少用同步模式,通常直接当作 UART 使用。
2. 关键区别(开发中无需纠结,重点记 "UART 足够用")
| 特性 | UART | USART |
|---|---|---|
| 时钟依赖 | 无(异步) | 可选(同步 / 异步) |
| 硬件线数 | 最少 2 根(TX 发送、RX 接收,GND 共地) | 异步模式同 UART,同步模式需加 SCLK |
| 嵌入式应用 | 99% 场景(调试、模块通信) | 本质用其 UART 模式,同步模式极少用 |
2.1 核心工作原理(嵌入式开发必须掌握)
1. 通信本质
- 串行传输:数据按位(bit) 顺序发送(而非并行),节省 GPIO 资源。
- 异步同步:无需时钟线,发送方和接收方必须提前约定波特率、数据位、校验位、停止位(即 "串口参数"),否则数据传输错误。
2. 帧结构(核心!配置串口的关键依据)
串口数据以 "帧" 为单位传输,标准帧结构(嵌入式最常用:8N1)如下:
起始位(1bit,低电平) → 数据位(8bit,LSB先传) → 校验位(0/1bit,可选) → 停止位(1bit,高电平)
- 起始位:低电平触发接收(默认空闲状态为高电平);
- 数据位:5~9bit 可选,嵌入式中 99% 用 8bit(字节传输);
- 校验位:无(N)、奇(O)、偶(E)可选,用于简单错误检测(嵌入式中常用 "无校验",靠上层协议容错);
- 停止位:1/1.5/2bit 可选,高电平结束一帧,保证帧间隔。
3. 关键参数(STM32 配置时必须匹配,否则乱码)
异步时必须提前规定波特率
- 波特率 :每秒传输的比特数(bit/s),嵌入式常用:9600、19200、115200(调试首选)、460800(高速传输);
- 注意:双方波特率误差需≤3%(由晶振精度决定,STM32 用 HSE 晶振比 HSI 更稳定)。
- 数据位 + 校验位 + 停止位:嵌入式标准配置为 8N1(8 位数据、无校验、1 位停止位),部分模块可能用 7E1(7 位数据 + 偶校验),需看模块手册。
1.3 硬件连接(嵌入式实战重点)
1. 最小系统连接(必须共地!)
- 主机 TX → 从机 RX(交叉连接,如 STM32 的 PA9 (TX) → 蓝牙模块的 RX);
- 主机 RX → 从机 TX;
- 主机 GND → 从机 GND(共地是通信成功的关键,否则信号干扰导致乱码)。
2. 电平匹配(嵌入式常见坑!)
- 嵌入式 MCU(如 STM32)的串口电平:TTL 电平(0V = 低电平,3.3V = 高电平);
- PC 机串口电平:RS232 电平(-15V~-3V = 高电平,3V~15V = 低电平);
- 若 STM32 直接连 PC,需用 USB-TTL 模块(如 CH340)做电平转换,否则会烧毁 GPIO。
1.4 嵌入式开发核心应用场景
- 调试打印 :重定向
printf到串口,输出调试信息(如变量值、函数执行状态),是嵌入式开发最基础的调试手段; - 模块通信:与低速率传感器 / 模块通信(如 GPS 模块、蓝牙模块 HC-05、温湿度传感器 SHT30(UART 版本)、RFID 模块);
- 设备间通信:两个 MCU(如 STM32 与 Arduino)之间的简单数据交互(无需复杂协议,直接传字节)。
1.5 STM32 开发关键要点(贴合实战)

- 外设选择:STM32 的 USART1~USART3、UART4~UART5(不同型号不同),均可配置为 UART 模式;
- 配置步骤 :
- GPIO 复用:将 TX 配置为复用推挽输出,RX 配置为浮空输入;
- 波特率配置:通过 USART 的 BRR 寄存器设置(由 APB 时钟和目标波特率计算得出,STM32CubeMX 可自动生成);
- 帧格式配置:CR1 寄存器设置数据位、校验位,CR2 设置停止位;
- 中断 / DMA:接收数据常用中断(避免阻塞),大量数据传输用 DMA(降低 CPU 占用);
- 常见问题 :
- 乱码:波特率不匹配、电平不匹配、共地不良;
- 丢包:接收缓冲区溢出(未及时读取)、中断优先级设置过低、波特率误差过大。
1.6 总结(嵌入式开发视角)
- UART 是串口协议的核心,USART 在嵌入式中本质当作 UART 用,无需关注同步模式;
- 核心记住 "8N1+115200 波特率" 这一标准配置,90% 场景适用;
- 开发重点:GPIO 复用配置、波特率计算、中断 / DMA 接收、电平匹配与共地,这些直接决定通信成败。
1.7 逻辑电平与电气电平的对应关系(补充)
电平标准是数据1和数据0的表达方式,是传输线缆中人为规定的电
压与数据的对应关系,串口常用的电平标准有如下三种:
ITL电平:+3.3V或+5V表示1,0V表示0
RS232电平:-3~-15V表示1,+3~+15V表示0
RS485电平:两线压差+2~+6V表示1,-2~-6V表示0(差分信号)
二、通信讲解
2.1 串口参数及时序
注:低位先行
波特率:串口通信的速率
起始位:标志一个数据帧的开始,固定为低电平
数据位:数据帧的有效载荷,1为高电平,0为低电平,低位先行
校验位:用于数据验证,根据数据位计算得来
停止位:用于数据帧间隔,固定为高电平

8 位数据位的帧格式:帧结构为「1 位起始位 + 8 位数据位(D0~D7) + 1 位停止位」,总长度 10 位,对应常见的 "8N1" 配置(8 位数据、无校验、1 位停止位)。

9 位数据位的帧格式:帧结构为「1 位起始位 + 9 位数据位(D0~D7 + RB8/TB8) + 1 位停止位」,总长度 11 位。这里的 "RB8/TBS" 是第 9 位数据位(在 USART 外设中,第 9 位常被标记为 RB8(接收)/TB8(发送))。
2.2 串口时序实际采样图


做个简短分析,一般的MCU都已经集成了UART

注:可以学习一下逻辑分析仪采样方法,可以使用便宜的学习研究波形,到工作中就可以使用更精密的仪器调试工业设备或者量产产品了。

或者
