STM32 进阶封神之路(十一):串口通信底层原理全解析 ——UART/USART 区别 + 电平标准 + 协议规范(面试重点)

30 阅读14分钟

STM32 进阶封神之路(十一):串口通信底层原理全解析 ——UART/USART 区别 + 电平标准 + 协议规范(面试重点)

上一篇我们掌握了外设定时器的 PWM 输出与定时中断,这一篇聚焦嵌入式开发中最常用的通信方式 ——串口通信。串口(UART/USART)是 STM32 与电脑、模块(蓝牙 / WiFi/4G)、其他设备交互的核心接口,从调试打印(printf)到数据传输,几乎所有嵌入式项目都离不开它。

本文基于实战资料,从通信分类、串口核心概念,到 UART/USART 区别、电平标准、协议规范,手把手带你吃透串口通信的底层逻辑,为下一篇 STM32 串口实战(发送 / 接收 / 中断)打下坚实基础,同时覆盖高频面试考点!

一、通信分类核心认知:理清串口的定位

在深入串口前,先明确嵌入式通信的核心分类的 —— 不同通信方式适配不同场景,串口的 “异步、全双工、串行” 特性决定了它的通用性。

1. 嵌入式通信的 6 大核心分类维度

通信分类是面试高频考点,需从 “数据传输方式、电平类型、通信方向、时钟同步、设备拓扑”5 个维度精准区分:

(1)串行通信 vs 并行通信(按数据传输方式)

表格

类型核心逻辑优势劣势典型应用
串行通信数据 1bit 逐位传输(仅需 1 根数据线)引脚少、成本低、抗干扰强、传输距离远传输速度慢串口(UART)、I2C、SPI、485、CAN
并行通信数据多 bit 同时传输(需多根数据线)传输速度快引脚多、成本高、抗干扰弱、传输距离近8080 并口(LCD 屏幕)、内存总线

关键区别:是否用单根数据线传输 —— 串口属于串行通信,仅需 TX(发送)、RX(接收)两根线即可实现双向通信。

(2)单端通信 vs 差分通信(按电平类型)

表格

类型核心逻辑优势劣势典型应用
单端通信以 GND 为参考,通过单根线的高低电平表示 0/1电路简单、成本低抗干扰弱、传输距离近(≤10 米)串口(UART TTL)、GPIO 模拟通信
差分通信通过两根线的电压差表示 0/1(如 A-B>0.2V 为 1,A-B<-0.2V 为 0)抗干扰极强、传输距离远(≤1200 米)电路复杂、成本高485、CAN、以太网

关键区别:是否依赖 GND 参考 —— 串口(UART)默认是单端通信,而 485 是串口的差分扩展版本。

(3)单工 vs 半双工 vs 全双工(按通信方向)

表格

类型核心逻辑典型应用
单工仅能单向传输(要么发、要么收)收音机、红外遥控(仅接收)
半双工可双向传输,但不能同时进行485 通信、对讲机
全双工可双向传输,且同时进行串口(UART)、SPI、手机通话

关键区别:双向通信是否同步 —— 串口(UART)是全双工,TX 发数据的同时,RX 可接收数据,互不影响。

(4)同步通信 vs 异步通信(按时钟同步方式)

表格

类型核心逻辑优势劣势典型应用
同步通信有独立时钟线(如 SPI 的 SCK、I2C 的 SCL),主机控制从机时钟节奏传输速度快、时序精准多一根时钟线、成本高SPI、I2C、USART(同步模式)
异步通信无时钟线,双方约定统一波特率同步引脚少、成本低、灵活性高传输速度慢、依赖波特率一致性UART、485、CAN

关键区别:是否需要独立时钟线 —— 我们常用的 “串口通信” 本质是 UART(异步串口),无需时钟线,仅需约定波特率即可。

(5)点对点 vs 主从多设备(按设备拓扑)

表格

类型核心逻辑典型应用
点对点仅两个设备通信(1 对 1)UART(STM32 与电脑)、USB
主从多设备1 个主机 + 多个从机(1 对多)I2C(1 主机 + 10 从机)、SPI(1 主机 + 多从机)、485(1 主机 + 32 从机)

关键区别:是否支持多设备组网 ——UART 默认是点对点通信,而 485 在串口基础上实现了主从多设备组网。

2. 常见通信方式分类汇总(实战选型参考)

表格

通信方式串行 / 并行单端 / 差分单工 / 半双工 / 全双工同步 / 异步设备拓扑核心引脚
UART(串口)串行单端全双工异步点对点TX、RX、GND
USART串行单端全双工同步 / 异步点对点TX、RX、CLK、GND
I2C串行单端半双工同步主从多设备SDA、SCL、GND
SPI串行单端全双工同步主从多设备SCK、MOSI、MISO、CS、GND
485串行差分半双工异步主从多设备A、B、GND
CAN串行差分半双工异步主从多设备CAN_H、CAN_L、GND

核心结论:串口(UART)的核心标签是 “串行、单端、全双工、异步、点对点”,这也是它成为通用通信接口的关键原因。

二、串口核心概念:UART vs USART 到底差在哪?

很多新手混淆 “UART” 和 “USART”,甚至认为是同一概念 —— 其实两者有明确区别,且 STM32 的串口本质是 USART(支持同步模式),但实际应用中几乎都用 UART 模式。

1. UART 与 USART 的核心区别

表格

类型英文全称核心特性时钟需求应用场景
UARTUniversal Asynchronous Receiver/Transmitter(通用异步收发器)仅支持异步通信,无时钟线无需时钟线,依赖波特率同步99% 的嵌入式场景(STM32 与电脑、模块通信)
USARTUniversal Synchronous/Asynchronous Receiver/Transmitter(通用同步 / 异步收发器)支持同步 + 异步通信,可选时钟线同步模式需 CLK 时钟线,异步模式无需需时钟同步的高精度通信(极少用)

关键区别:是否支持同步模式 ——USART 是 UART 的超集,包含 UART 的所有功能,而我们日常说的 “串口通信”,本质是用 USART 的 UART 模式。

2. 串口的 3 种电平标准(实战必懂)

串口的 “电平标准” 直接决定设备能否通信,不同设备对接时必须保证电平一致,否则会烧毁引脚或通信失败:

(1)TTL 电平(STM32 串口默认电平)
  • 核心定义:VCC=3.3V(或 5V),高电平(1)=3.3V/5V,低电平(0)=0V;
  • 应用场景:STM32、单片机、模块(蓝牙、WiFi)的串口引脚输出;
  • 通信距离:≤10 米(单端通信抗干扰弱);
  • 关键注意:3.3V 和 5V TTL 可直接对接(STM32 的 GPIO 兼容 5V 电平)。
(2)RS232 电平(传统电脑串口电平)
  • 核心定义:高电平(1)=-3V~-15V,低电平(0)=+3V~+15V;
  • 应用场景:老式电脑的 DB9 串口、工业设备;
  • 通信距离:≤15 米;
  • 关键注意:与 TTL 电平反向且电压范围大,直接对接会烧毁 STM32 引脚,需通过 MAX3232 芯片转换。
(3)RS485 电平(工业串口电平)
  • 核心定义:差分电平,A-B>0.2V 为 1,A-B<-0.2V 为 0;
  • 应用场景:工业现场、远距离通信(如传感器组网);
  • 通信距离:≤1200 米(差分抗干扰强);
  • 关键注意:需通过 SP3485 等芯片将 TTL 电平转换为 485 电平,支持 32 个设备组网。

实战对接原则:设备通信时电平标准必须一致 ——STM32 与电脑通信需用 “USB-TTL 模块”(CH340 芯片)将 TTL 电平转换为 USB 电平,STM32 与工业设备通信需用 485 模块转换电平。

三、串口协议层:通信的 “语言规则”(必掌握)

串口是 “物理层 + 协议层” 的组合,物理层是 TX/RX 引脚和电平,协议层是数据传输的规则 —— 没有规则的电平变化只是杂乱信号,无法被解析。

1. 串口通信的核心参数(协议层基础)

串口通信前必须约定 4 个核心参数(“串口四要素”),双方参数不一致则通信失败:

(1)波特率(Baud Rate)
  • 定义:每秒传输的二进制位数(bit/s),表示通信速度;
  • 常用值:9600、19200、38400、115200(最常用)、230400;
  • 关键注意:双方波特率必须完全一致,误差≤3%(否则数据错位);
  • 计算示例:115200 波特率 = 每秒传输 115200bit,约 11.52KB/s(1 字节 = 8bit+1 起始位 + 1 停止位)。
(2)数据位(Data Bits)
  • 定义:每帧数据中包含的有效数据位数;
  • 常用值:8 位(最常用)、7 位;
  • 实战选择:嵌入式场景默认 8 位(足够表示 0~255 的数值和 ASCII 字符)。
(3)校验位(Parity Bit)
  • 定义:用于校验数据传输是否出错的额外位;

  • 常用类型:无校验(最常用)、奇校验、偶校验;

  • 校验逻辑:

    • 奇校验:数据位 + 校验位的 1 的个数为奇数;
    • 偶校验:数据位 + 校验位的 1 的个数为偶数;
  • 实战选择:无校验(校验位会降低传输效率,嵌入式场景干扰小,无需校验)。

(4)停止位(Stop Bits)
  • 定义:每帧数据结束的标识位;
  • 常用值:1 位(最常用)、1.5 位、2 位;
  • 作用:分隔连续的两帧数据,避免数据粘连。

实战默认配置:115200bps、8 位数据位、无校验、1 位停止位(简称 “8N1”)——99% 的嵌入式项目都用此配置。

2. 串口数据帧格式(协议层核心)

串口数据按 “帧” 传输,一帧数据包含 5 个部分,按顺序发送:

plaintext

起始位(1bit,低电平)→ 数据位(8bit,LSB先行)→ 校验位(0/1bit,可选)→ 停止位(1/1.5/2bit,高电平)
帧格式详解(以 8N1 为例)
  • 起始位:固定 1bit 低电平,标识一帧数据开始(打破空闲时的高电平状态);
  • 数据位:8bit 有效数据,按 “最低位(LSB)→ 最高位(MSB)” 顺序传输;
  • 校验位:0bit(无校验);
  • 停止位:固定 1bit 高电平,标识一帧数据结束;
  • 空闲状态:无数据传输时,TX/RX 引脚为高电平。
示例:发送字符 'A'(ASCII 码 0x41=01000001)的帧格式

plaintext

起始位(0)→ 数据位(0→0→0→0→0→1→0→1)→ 停止位(1)
  • 一帧总位数:1+8+0+1=10bit;
  • 传输时间:1/115200 ×10≈86.8μs(115200 波特率下)。

3. 串口传输时间计算(面试考点)

需掌握 “单字节传输时间” 和 “多字节传输时间” 的计算方法,核心公式:

plaintext

单字节传输时间 T_byte = (起始位位数 + 数据位位数 + 校验位位数 + 停止位位数) / 波特率
多字节传输时间 T_total = T_byte × 字节数
实战计算示例

需求:用 115200bps(8N1)传输 100 字节数据,计算总传输时间:

  • 单字节位数:1+8+0+1=10bit;
  • 单字节传输时间:10 / 115200 ≈86.8μs;
  • 100 字节总时间:86.8μs ×100≈8.68ms。

四、串口的核心作用与硬件实现

1. 串口在嵌入式中的 3 大核心作用

  • 调试打印:通过 printf 函数输出调试信息(如变量值、程序运行状态),是开发中排错的核心手段;
  • 设备通信:STM32 与电脑、蓝牙模块、WiFi 模块、4G 模块、其他单片机的短距离数据传输;
  • 程序下载:部分 STM32 型号支持串口下载(需 CH340 模块和一键下载电路),将程序通过串口烧录到芯片。

2. 串口下载的硬件原理(实战必懂)

串口下载的核心是 “自动切换 BOOT 模式”,硬件链路如下:

plaintext

电脑 → USB线 → CH340模块(USB转TTL) → STM32的USART1(TX/RX) → 一键下载电路 → STM32芯片
一键下载电路核心逻辑

STM32 的 BOOT0 引脚决定启动模式:

  • BOOT0=0:从 Flash 启动(正常运行程序);
  • BOOT0=1:从串口接收程序(下载模式);一键下载电路通过 CH340 的 RTS 引脚自动控制 BOOT0 电平,无需手动切换:
  • 下载时:RTS 引脚拉低,通过三极管切换 BOOT0=1,进入下载模式;
  • 下载完成后:RTS 引脚拉高,BOOT0=0,自动重启运行程序。

五、串口相关面试高频题(附标准答案)

1. 问题 1:UART 和 USART 的区别是什么?STM32 的串口是 UART 还是 USART?

标准答案:
  • 区别:UART 仅支持异步通信(无时钟线),USART 支持同步 + 异步通信(可选时钟线),USART 是 UART 的超集;
  • STM32 的串口是 USART(如 USART1~USART3),但实际应用中几乎都用其 UART 模式(异步、无时钟线),因此习惯称为 “串口 UART”。

2. 问题 2:串口通信的 “四要素” 是什么?如果通信乱码,可能的原因有哪些?

标准答案:
  • 四要素:波特率、数据位、校验位、停止位(默认 8N1:115200bps、8 位数据、无校验、1 位停止);
  • 乱码原因:① 波特率不一致;② 数据位 / 校验位 / 停止位配置不匹配;③ 双方时钟误差过大;④ 硬件连接错误(TX/RX 接反);⑤ 电平标准不匹配(如 TTL 接 RS232);⑥ 干扰导致数据传输错误。

3. 问题 3:串口、I2C、SPI 的核心区别是什么?

标准答案:

表格

对比维度串口(UART)I2CSPI
同步方式异步(无时钟线)同步(SCL 时钟线)同步(SCK 时钟线)
通信方向全双工半双工全双工
设备拓扑点对点主从多设备(1 主多从)主从多设备(1 主多从)
核心引脚TX、RX、GNDSDA、SCL、GNDSCK、MOSI、MISO、CS、GND
传输速度中等(≤1Mbps)较慢(≤1Mbps)最快(≤100Mbps)
抗干扰中等中等

4. 问题 4:TTL、RS232、RS485 三种电平的区别是什么?

标准答案:
  • TTL 电平:3.3V/5V 为 1,0V 为 0,单端通信,传输距离≤10 米,适用于板内 / 短距离通信;
  • RS232 电平:-3~-15V 为 1,+3~+15V 为 0,单端通信,传输距离≤15 米,适用于老式电脑串口;
  • RS485 电平:差分通信(A-B>0.2V 为 1,A-B<-0.2V 为 0),传输距离≤1200 米,抗干扰强,适用于工业远距离通信;
  • 关键注意:不同电平不能直接对接,需通过转换芯片(如 MAX3232 将 TTL 转 RS232,SP3485 将 TTL 转 RS485)。

六、总结:串口核心要点与实战铺垫

1. 核心要点回顾

  • 串口本质:UART(异步、串行、单端、全双工、点对点),核心引脚 TX/RX/GND;
  • 协议核心:四要素(波特率、数据位、校验位、停止位)+ 帧格式(起始位→数据位→停止位);
  • 电平标准:STM32 默认 TTL 电平,对接电脑需 USB-TTL 模块,对接工业设备需 485 模块;
  • 面试重点:通信分类、UART/USART 区别、电平标准、乱码排查。

2. 下一篇实战铺垫

掌握底层原理后,下一篇我们将聚焦 STM32 串口的实战开发,覆盖:

  • 串口初始化配置(库函数 + 寄存器);
  • 串口发送(单字节、字符串、printf 重定向);
  • 串口接收(查询阻塞式、中断非阻塞式);
  • 实战案例:STM32 与电脑串口通信、蓝牙模块数据传输。