2. MCU基础概念
在开始画最小系统原理图之前,先把 MCU 内部几个最基础的概念理清楚,会让后续的电源、时钟、复位、下载电路设计变得有据可依。本节围绕六个关键词展开:冯·诺依曼与哈佛架构、RISC 与 CISC、内核与外设、时钟树、复位系统、存储器映射。它们分别回答了“程序和数据怎么走”“指令怎么执行”“芯片里谁在干活”“节拍从哪来”“怎么从头开始”“地址空间怎么分”这六个问题。
一、两种存储架构:冯·诺依曼与哈佛
冯·诺依曼架构把程序指令和数据放在同一存储空间,共用一条总线,CPU 取指令和取数据必须分时进行,结构简单但存在“冯·诺依曼瓶颈”。哈佛架构则把指令存储器和数据存储器分开,各自拥有独立总线,可以同时取指令和取数据,吞吐率更高。多数 MCU(如 AVR、ARM Cortex-M 系列)采用改进型哈佛结构:内核通过独立的总线接口访问 Flash 和 SRAM,对外仍呈现统一的地址空间。
对板级设计而言,这一区别直接影响启动方式与总线布局。例如 Cortex-M 的 I-Code 总线取指令、D-Code 总线取数据,二者可并行,因此代码放在 Flash、数据放在 SRAM 时性能最佳;若把频繁访问的数据也放进 Flash,就会与取指争用总线。
二、RISC 与 CISC:指令集的取舍
RISC(精简指令集)指令长度固定、寻址方式少、单周期执行比例高,配合流水线可获得稳定的每周期指令数;CISC(复杂指令集)指令长度可变、单条指令功能强,但译码和执行周期不固定。MCU 领域以 RISC 为主,ARM Cortex-M、RISC-V、AVR 都是典型代表。RISC 的代价是完成同一功能需要更多指令,因此对编译器优化和代码密度更敏感,这也是 Thumb-2 这类混合指令集出现的原因。
| 对比项 | RISC | CISC |
|---|---|---|
| 指令长度 | 固定(如 16/32 位) | 可变(1~15 字节) |
| 寻址方式 | 少而规整 | 多而复杂 |
| 执行周期 | 多为单周期 | 多周期、微码控制 |
| 典型 MCU | Cortex-M、RISC-V、AVR | 8051、部分 x86 衍生核 |
| 板级影响 | 代码密度敏感,Flash 容量需留余量 | 指令紧凑,但时序不易预测 |
三、内核与外设:谁在干活
内核(Core)负责取指、译码、执行、中断响应;外设(Peripheral)是挂在总线上的功能模块,如 GPIO、UART、SPI、I²C、ADC、定时器、DMA。内核通过总线矩阵访问外设寄存器,外设通过中断线或 DMA 请求与内核交互。理解“内核—总线—外设”这三层关系,是看懂时钟使能、复位分组和寄存器映射的前提。
四、时钟树:整个系统的节拍来源
时钟树描述从时钟源到各功能模块的分频、倍频与选择路径。典型 MCU 的时钟源包括内部高速 RC(HSI)、内部低速 RC(LSI)、外部晶振(HSE)、外部低速晶振(LSE),经 PLL 倍频后成为系统时钟 SYSCLK,再经 AHB/APB 预分频器分配给内核、总线和外设。设计时要关注三点:晶振负载电容与起振裕量、PLL 锁定时间、各总线最高频率限制。
HSE 8MHz ──► PLL ×9 ──► SYSCLK 72MHz
├─ AHB /1 ──► HCLK 72MHz(内核、DMA、SRAM)
└─ APB1 /2 ──► PCLK1 36MHz(UART、I²C、TIM)
APB2 /1 ──► PCLK2 72MHz(GPIO、SPI、ADC)
五、复位系统:让系统回到确定状态
复位系统保证上电或异常时,内核、外设和寄存器都回到已知初值。常见复位源有上电复位(POR)、掉电复位(PDR)、外部引脚复位(NRST)、看门狗复位、软件复位。复位后芯片从固定地址取向量表,因此复位电路的时间常数、NRST 引脚的去抖电容、以及复位释放与电源稳定的先后关系,都会影响启动可靠性。
六、存储器映射:地址空间怎么分
存储器映射把 Flash、SRAM、外设寄存器、系统控制区统一编入线性地址空间。以 Cortex-M 为例,0x0000_0000 起为代码区,0x2000_0000 起为 SRAM,0x4000_0000 起为外设,0xE000_0000 起为内核私有外设。启动时通过 BOOT 引脚或选项字节决定从 Flash、系统存储器还是 SRAM 映射到 0x0000_0000 处取复位向量。
七、案例与常见误区
以一个“串口每隔 1 秒发送一次温度”的最小系统为例:上电后 POR 释放,内核从 0x0000_0000 取复位向量;启动代码把 .data 段从 Flash 搬到 SRAM、清零 .bss;随后配置 HSE 与 PLL,将 SYSCLK 切到 72MHz;使能 GPIO、ADC、UART 的时钟;初始化定时器产生 1 秒中断;主循环等待中断并读取 ADC 结果,通过 UART 发出。整条链路中,时钟树决定波特率与采样时间,复位系统决定启动是否可靠,存储器映射决定链接脚本怎么写。
- 误区一:只改外设寄存器却不使能时钟,现象是“写进去读出来还是 0”。
- 误区二:把 NRST 电容随意加大,导致调试器连不上或复位释放过慢。
- 误区三:忽略总线频率上限,APB 分频设置过小导致外设时序超限。
- 误区四:链接脚本中 SRAM 长度写错,栈溢出后表现为随机死机。
把这六个概念串起来看:架构决定数据通路,指令集决定代码风格,内核与外设划分职责,时钟树提供节拍,复位系统保证起点,存储器映射规定地址。它们共同构成 MCU 最小系统设计的底层坐标系,后续的电源、晶振、下载与调试电路,都是围绕这套坐标系展开的。