August 24, 2026 in 电子与嵌入式4 minutes
介绍单片机的基础知识
MCU 是一颗"片上系统",内部模块众多且各司其职。下面以一颗主流 ARM Cortex-M MCU(如 STM32F4) 为蓝本,从内到外、从核心到外设,逐层拆解每一个模块的功能、原理和实际用途。
┌─────────────────────────────────────────────────────────┐
│ MCU 芯片 │
│ │
│ ┌──────────┐ ┌──────┐ ┌───────┐ ┌───────────────┐ │
│ │ CPU Core │ │ SRAM │ │ Flash │ │ Boot ROM │ │
│ │(Cortex-M)│ │ │ │ │ │(出厂固化程序) │ │
│ └────┬─────┘ └──┬───┘ └──┬────┘ └──────┬────────┘ │
│ │ │ │ │ │
│ ═════╪═══════════╪═════════╪═══════════════╪═════════ │
│ │ 内部总线矩阵 (Bus Matrix) │
│ ═════╪═══════════╪═════════╪═══════════════╪═════════ │
│ │ │ │ │ │
│ ┌────┴───────────┴─────────┴───────────────┴────────┐ │
│ │ 外设 & 系统模块 │ │
│ │ │ │
│ │ GPIO | UART | SPI | I²C | CAN | USB | ETH │ │
│ │ ADC | DAC | TIM | PWM | RTC | WDT │ │
│ │ DMA | NVIC | CRC | RNG | AES/HASH │ │
│ │ PWR | RCC | DBG | MPU/FPU │ │
│ └────────────────────────────────────────────────────┘ │
│ │
│ Pins ←→ 外部世界 │
└─────────────────────────────────────────────────────────┘
下面按 7 大类 逐一详解。
所有模块不是孤立工作的,通过多层 AHB/APB 总线矩阵互联:
CPU ──── AHB Bus Matrix ──── Flash
│ │ SRAM
│ │ DMA
│ │ GPIO
│ │ ...
│
└── APB1 Bridge ─── UART/SPI/I²C/TIM/...
└── APB2 Bridge ─── ADC/高级TIM/USB/...
⚠️ 理解总线结构对性能优化至关重要:把频繁访问的数据放在 AHB SRAM 而非 APB 外设寄存器,把 DMA 缓冲区放在 DMA 可访问的 SRAM 区域。
MCU 的"大脑",负责取指、译码、执行。
| 子模块 | 功能 | 说明 |
|---|---|---|
| ALU | 算术逻辑运算 | 加减乘除、位操作 |
| 寄存器组 | 通用寄存器 R0-R15 | R13=SP(栈指针), R14=LR(链接寄存器), R15=PC(程序计数器) |
| 流水线 | 指令预取+解码+执行 | Cortex-M3/M4 为 3 级流水线 |
| FPU | 浮点运算单元 | M4F/M7 才有,硬件加速 float/double |
| MPU | 内存保护单元 | 防止越界访问,RTOS 中隔离任务内存 |
| Cache | 指令/数据缓存 | M7 有 L1 Cache;M0/M3/M4 通常无 |
| Bit-Band | 位带操作 | 对单个 bit 进行原子读写(Cortex-M3/M4) |
| SysTick | 系统滴答定时器 | RTOS 的时基,24-bit 递减计数器 |
🔑 Cortex-M 系列分级:M0(入门) → M3(主流) → M4(DSP+FPU) → M7(高性能双核) → M23/M33(安全TrustZone) → M55/M85(AI+安全)
所有数字电路的心脏起搏器。
| 模块 | 功能 |
|---|---|
| HSI | 内部高速 RC 振荡器(~16MHz),精度 ±1%,上电默认时钟源 |
| HSE | 外部高速晶振(4~26MHz),精度高,PLL 基准 |
| LSI | 内部低速 RC(~32kHz),供 IWDG/RTC |
| LSE | 外部 32.768kHz 晶振,RTC 精确时基 |
| PLL | 锁相环,将 HSI/HSE 倍频到系统主频(如 8MHz→168MHz) |
| 时钟树 | 分频器网络,给 AHB/APB1/APB2 总线分配不同频率 |
| CSS | 时钟安全系统,HSE 失效自动切回 HSI |
| 复位源 | POR/PDR/BOR/NRST/WWDG/IWDG/SOFTWARE/STANDBY |
⚠️ 时钟配置是 MCU 初始化的第一步。配错 PLL 参数 → 主频不对 → UART 波特率偏差 → 通信乱码。
| 模块 | 功能 |
|---|---|
| NVIC | 嵌套向量中断控制器,优先级分组,最多 240 个中断源 |
| DMA | 直接内存访问,外设↔内存/内存↔内存搬运,解放 CPU |
| PWR | 电源管理:Sleep/Stop/Standby 低功耗模式,电压调节器 |
| CRC | 硬件 CRC32 校验,验证固件完整性 |
| RNG | 真随机数发生器,安全/加密用途 |
| AES / HASH / PKA | 硬件加密加速器(高端型号) |
| DBG | 调试接口 SWD/JTAG,断点、单步、变量查看 |
| Temp Sensor | 片内温度监测 |
| Unique ID | 96-bit 出厂唯一标识符 |
MCU 与外部世界的最基本接口。
每个引脚可配置为:
| 模式 | 说明 | 典型用途 |
|---|---|---|
| Input Floating | 浮空输入 | 外部已有上拉/下拉 |
| Input Pull-Up | 上拉输入 | 按键(低有效) |
| Input Pull-Down | 下拉输入 | 按键(高有效) |
| Output Push-Pull | 推挽输出 | LED、继电器驱动 |
| Output Open-Drain | 开漏输出 | I²C SDA/SCL、电平转换 |
| AF (Alternate Function) | 复用功能 | UART TX/RX、SPI CLK、PWM 等 |
| Analog | 模拟模式 | ADC/DAC 输入输出 |
附加特性:
MCU 中数量最多、功能最丰富的外设之一。
| 类型 | 功能 |
|---|---|
| 基本定时器 | 纯计数,触发 DAC、ADC |
| 通用定时器 | PWM 输出、输入捕获、编码器接口、单脉冲模式 |
| 高级定时器 | 互补 PWM + 死区插入 + 刹车 → 电机驱动 |
| 低功耗定时器 | Stop 模式下仍可运行 |
| 看门狗定时器 | IWDG(独立)/ WWDG(窗口),防程序跑飞 |
| RTC | 实时时钟,日历+闹钟+备份域供电 |
| SysTick | RTOS 时基 |
PWM 关键参数:频率、占空比、分辨率、死区时间、互补输出。
| 类别 | 模块 | 一句话功能 |
|---|---|---|
| 核心 | CPU/FPU/MPU | 执行程序、浮点运算、内存保护 |
| 存储 | Flash/SRAM/Boot ROM | 存代码、存数据、引导启动 |
| 时钟 | HSI/HSE/PLL/RCC | 产生并分配系统节拍 |
| IO | GPIO/EXTI | 数字输入输出、外部中断 |
| 通信 | UART/SPI/I²C/CAN/USB/ETH | 与外界交换数据 |
| 模拟 | ADC/DAC/COMP/OPAMP | 真实世界 ↔ 数字世界 |
| 定时 | TIM/PWM/WDT/RTC/SysTick | 计时、波形、看门狗、实时钟 |
| 系统 | NVIC/DMA/PWR/CRC/RNG/DBG | 中断、搬运、省电、校验、调试 |
| 互联 | Bus Matrix/AHB/APB | 模块间数据通路 |
不要试图一次记住所有模块。推荐路径:
每学一个模块,对照芯片参考手册(Reference Manual) 中的对应章节和数据手册(Datasheet) 中的引脚定义,这是 MCU 工程师的基本功。