2. 硬件平台介绍:常用MCU UART外设与中断架构

在嵌入式系统中,UART(通用异步收发器)是最基础、最常用的串行通信接口。本章以 STM32 和 ESP32 两大主流 MCU 平台为例,深入剖析其 UART 外设框图、中断控制器 NVIC 以及 DMA 可选路径,为后续中断模式驱动设计与实时性测试奠定硬件基础。

2.1 STM32 UART 外设框图与核心模块

STM32 系列(以 STM32F4/F7/H7 为例)的 USART/UART 外设结构高度模块化,包含以下关键单元:

  • 发送器(Transmitter):包含发送移位寄存器(TSR)和发送数据寄存器(TDR),支持 8/9 位数据帧、可编程停止位。
  • 接收器(Receiver):包含接收移位寄存器(RSR)和接收数据寄存器(RDR),具备过采样、噪声检测和帧错误标志。
  • 波特率发生器(Baud Rate Generator):基于系统时钟分频,支持分数波特率,典型误差 < 0.5%。
  • 控制与状态寄存器组:包含 SR(状态寄存器)、DR(数据寄存器)、CR1/CR2/CR3(控制寄存器),管理使能、中断、DMA 请求等。
  • 中断与 DMA 请求逻辑:可独立使能 TXE(发送缓冲区空)、TC(发送完成)、RXNE(接收缓冲区非空)、IDLE(总线空闲)等中断源。
关键指标: STM32F407 的 USART1 最高波特率可达 10.5 Mbit/s(APB2 时钟 42 MHz 时),支持硬件流控制(RTS/CTS)。
STM32 UART 外设框图 STM32 USART 外设框图 系统时钟 波特率发生器 发送器 TDR + TSR 接收器 RDR + RSR 控制/状态寄存器 CR1/CR2/CR3/SR 中断 & DMA 逻辑 TXE/RXNE/TC/IDLE 说明 • TXE: 发送数据寄存器空 • RXNE: 接收数据寄存器非空 • TC: 发送完成 • IDLE: 总线空闲检测 • 支持 DMA 请求

2.2 ESP32 UART 外设框图与特性

ESP32 的 UART 外设与 STM32 类似,但增加了更多面向 IoT 场景的特性:

特性 STM32 (F4系列) ESP32
UART 数量 最多 8 个 (USART1~8) 3 个 (UART0/1/2)
最高波特率 10.5 Mbit/s (APB2) 5 Mbit/s
硬件流控 RTS/CTS 支持 RTS/CTS 支持
RS485 模式 支持 (DE 控制) 软件模拟
IrDA 编码 支持 不支持
LIN 总线 支持 不支持
DMA 集成 独立 DMA 控制器 内置 GDMA (通用 DMA)
FIFO 深度 1 字节 (无硬件 FIFO) 128 字节 (硬件 FIFO)
ESP32 硬件 FIFO 优势: 128 字节的硬件 FIFO 可大幅降低中断频率,在相同波特率下,CPU 负载比 STM32 无 FIFO 方案低 60%~80%,对实时性有显著改善。
ESP32 UART 外设框图 ESP32 UART 外设框图 APB 时钟 波特率发生器 发送 FIFO 128 字节 接收 FIFO 128 字节 配置寄存器 CONF0/CONF1/HWC 中断 & GDMA FIFO 触发级 说明 • 硬件 FIFO 深度 128 字节 • 可编程 FIFO 触发阈值 • 支持自动流控 • GDMA 支持多通道 • 每个 UART 独立中断

2.3 中断控制器 NVIC 架构

NVIC(嵌套向量中断控制器)是 ARM Cortex-M 系列 MCU 的核心中断管理单元,直接影响 UART 中断的响应实时性。

2.3.1 NVIC 关键特性

  • 可嵌套中断:支持高优先级中断抢占低优先级中断,实现实时任务分层。
  • 中断优先级分组:支持 4~16 级可编程优先级(取决于 MCU 型号),可配置抢占优先级和子优先级。
  • 向量表:中断服务函数入口地址集中存放在向量表中,支持动态重定位(VTOR 寄存器)。
  • 尾链(Tail-Chaining):连续中断处理时,跳过出栈/入栈操作,降低中断延迟。
  • 迟来(Late-Arriving):更高优先级中断在压栈阶段到达时,优先处理高优先级中断。
实时性关键: UART 中断优先级应设置为高于普通任务但低于定时器/调度器中断。典型配置:抢占优先级 2(共 4 级),子优先级 0。
NVIC 中断处理流程 NVIC 中断处理流程 UART 中断请求 优先级比较 自动压栈 取向量表地址 执行 ISR 自动出栈 返回主程序 NVIC 中断延迟组成 中断延迟 = 优先级判断时间 + 压栈时间 (12 个 CPU 周期) + 取向量时间 + ISR 入口执行时间

2.4 DMA 可选路径与中断协同

DMA(直接存储器访问)可绕过 CPU 直接搬运 UART 数据,显著降低中断频率和 CPU 负载。在中断模式驱动中,DMA 通常作为可选加速路径。

2.4.1 DMA 传输模式对比

模式 描述 适用场景 中断触发时机
普通模式 单次传输指定长度后停止 固定长度数据包 传输完成中断
循环模式 自动重载,连续传输 连续数据流(如 GPS 数据) 半传输/传输完成中断
双缓冲模式 两个内存缓冲区交替使用 高速数据采集 缓冲区切换中断
链表模式 多个 DMA 描述符链式执行 复杂多段传输 每个描述符完成中断

2.4.2 UART + DMA 典型配置流程

  1. 初始化 DMA 控制器:配置通道、优先级、数据宽度(8 位)、传输方向(外设到内存或内存到外设)。
  2. 配置 UART 的 DMA 请求:使能 UART 的 DMA 发送/接收请求(如 STM32 的 CR3 寄存器中的 DMAT/DMAR 位)。
  3. 设置 DMA 缓冲区:分配内存缓冲区,配置源地址(UART 数据寄存器地址)和目的地址(缓冲区地址)。
  4. 使能 DMA 中断:配置传输完成中断、半传输中断或错误中断。
  5. 启动传输:使能 DMA 通道,UART 自动触发 DMA 请求。
注意事项: DMA 传输期间,CPU 不能访问 UART 数据寄存器;DMA 中断优先级应低于实时任务中断,避免 DMA 中断阻塞关键任务;循环模式下需处理缓冲区覆盖问题。
UART + DMA 数据流 UART + DMA 数据流 UART 外设 数据寄存器 DMA 控制器 通道 + 仲裁 内存缓冲区 接收/发送缓冲 CPU 中断处理 中断信号 DMA 传输优势 CPU 只需在 DMA 传输完成时响应一次中断,无需逐字节处理,大幅降低中断频率和 CPU 负载。

2.5 中断延迟与吞吐量关键参数

在中断模式 UART 驱动中,以下参数直接影响实时性和吞吐量:

参数 典型值 (STM32F4 @168MHz) 典型值 (ESP32 @240MHz) 对实时性的影响
中断延迟 (最小) 12 个 CPU 周期 (~71 ns) ~50 ns (FreeRTOS 关中断时除外) 决定响应速度
中断延迟 (最大) ~200 ns (无高优先级中断抢占) ~500 ns (受 FreeRTOS 临界区影响) 决定最坏情况响应
ISR 执行时间 ~1 μs (单字节处理) ~0.8 μs (单字节处理) 决定中断占用率
最大吞吐量 (中断模式) ~4 Mbit/s (115200 波特率下 CPU 负载 5%) ~3 Mbit/s (硬件 FIFO 降低中断频率) 决定数据传输上限
DMA 最大吞吐量 ~10.5 Mbit/s (接近波特率上限) ~5 Mbit/s (受 GDMA 带宽限制) 决定极限传输能力
设计建议: 对于高波特率(≥ 1 Mbit/s)应用,建议启用 DMA 或硬件 FIFO;对于低波特率(≤ 115200 bit/s)且对实时性要求高的场景,纯中断模式配合合理优先级配置即可满足需求。

2.6 本章小结

本章详细介绍了 STM32 和 ESP32 的 UART 外设架构、NVIC 中断控制器以及 DMA 可选路径。核心要点包括:

  • STM32 UART 无硬件 FIFO,中断频率与波特率成正比;ESP32 的 128 字节 FIFO 可显著降低中断负载。
  • NVIC 的中断优先级分组和嵌套能力是保障实时性的关键,UART 中断优先级应合理设置。
  • DMA 可卸载 CPU 的中断处理负担,适用于高吞吐量场景,但需注意缓冲区管理和中断优先级协调。
  • 中断延迟和 ISR 执行时间是衡量实时性的核心指标,需在驱动设计阶段进行量化评估。