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

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 的核心区别

表格

类型 英文全称 核心特性 时钟需求 应用场景
UART Universal Asynchronous Receiver/Transmitter(通用异步收发器) 仅支持异步通信,无时钟线 无需时钟线,依赖波特率同步 99% 的嵌入式场景(STM32 与电脑、模块通信)
USART Universal 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) I2C SPI
同步方式 异步(无时钟线) 同步(SCL 时钟线) 同步(SCK 时钟线)
通信方向 全双工 半双工 全双工
设备拓扑 点对点 主从多设备(1 主多从) 主从多设备(1 主多从)
核心引脚 TX、RX、GND SDA、SCL、GND SCK、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 与电脑串口通信、蓝牙模块数据传输。
相关推荐
为搬砖记录2 小时前
杰理AC695N soundbox 3.1.2打开ble宏的编译bug
c语言·开发语言·单片机·bug
wuyikeer2 小时前
SocketTool、串口调试助手、MQTT中间件基础
单片机·嵌入式硬件·中间件
阿祖_in_coding2 小时前
面试之嵌入式基础知识:uart、i2c、spi
嵌入式硬件
济6172 小时前
STM32 I2C 总线通信实战|从原理到 OLED 屏数据收发(超详细)---STM32 HAL库专栏
stm32·嵌入式·stm32hal库编程
Hello_Embed2 小时前
LVGL 入门(四):大小坐标与盒子模型
前端·笔记·stm32·单片机·嵌入式
風清掦2 小时前
【江科大STM32学习笔记-08】DMA直接存储器存取
笔记·stm32·单片机·嵌入式硬件·学习
17(无规则自律)2 小时前
嵌入式 Linux 启动:设备树的加载、传递和解析全流程分析
linux·stm32·嵌入式硬件·unix
somi72 小时前
51单片机-01-在8位数码管上动态滚动显示数字
单片机·嵌入式硬件·51单片机
爱倒腾的老唐3 小时前
05、STM32 开发基础知识
stm32·单片机·嵌入式硬件