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)。
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%,对实时性有显著改善。
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。
2.4 DMA 可选路径与中断协同
DMA(直接存储器访问)可绕过 CPU 直接搬运 UART 数据,显著降低中断频率和 CPU 负载。在中断模式驱动中,DMA 通常作为可选加速路径。
2.4.1 DMA 传输模式对比
| 模式 | 描述 | 适用场景 | 中断触发时机 |
|---|---|---|---|
| 普通模式 | 单次传输指定长度后停止 | 固定长度数据包 | 传输完成中断 |
| 循环模式 | 自动重载,连续传输 | 连续数据流(如 GPS 数据) | 半传输/传输完成中断 |
| 双缓冲模式 | 两个内存缓冲区交替使用 | 高速数据采集 | 缓冲区切换中断 |
| 链表模式 | 多个 DMA 描述符链式执行 | 复杂多段传输 | 每个描述符完成中断 |
2.4.2 UART + DMA 典型配置流程
- 初始化 DMA 控制器:配置通道、优先级、数据宽度(8 位)、传输方向(外设到内存或内存到外设)。
- 配置 UART 的 DMA 请求:使能 UART 的 DMA 发送/接收请求(如 STM32 的 CR3 寄存器中的 DMAT/DMAR 位)。
- 设置 DMA 缓冲区:分配内存缓冲区,配置源地址(UART 数据寄存器地址)和目的地址(缓冲区地址)。
- 使能 DMA 中断:配置传输完成中断、半传输中断或错误中断。
- 启动传输:使能 DMA 通道,UART 自动触发 DMA 请求。
注意事项: DMA 传输期间,CPU 不能访问 UART 数据寄存器;DMA 中断优先级应低于实时任务中断,避免 DMA 中断阻塞关键任务;循环模式下需处理缓冲区覆盖问题。
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 执行时间是衡量实时性的核心指标,需在驱动设计阶段进行量化评估。