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 这类混合指令集出现的原因。

对比项RISCCISC
指令长度固定(如 16/32 位)可变(1~15 字节)
寻址方式少而规整多而复杂
执行周期多为单周期多周期、微码控制
典型 MCUCortex-M、RISC-V、AVR8051、部分 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 引脚的去抖电容、以及复位释放与电源稳定的先后关系,都会影响启动可靠性。

NRST 上的电容并非越大越好。电容过大会延长复位释放时间,导致调试器无法连接或启动时序异常;一般按数据手册推荐值选取,并保证上电斜率满足要求。

六、存储器映射:地址空间怎么分

存储器映射把 Flash、SRAM、外设寄存器、系统控制区统一编入线性地址空间。以 Cortex-M 为例,0x0000_0000 起为代码区,0x2000_0000 起为 SRAM,0x4000_0000 起为外设,0xE000_0000 起为内核私有外设。启动时通过 BOOT 引脚或选项字节决定从 Flash、系统存储器还是 SRAM 映射到 0x0000_0000 处取复位向量。

MCU 内核—总线—外设与存储器映射关系 内核 Core 取指 / 译码 / 执行 中断控制 NVIC RISC 流水线 总线矩阵 Bus Matrix I-Code / D-Code 并行 AHB / APB 桥接 DMA 通道 外设 Peripheral GPIO / UART / SPI / I²C ADC / TIM / DMA 寄存器读写 存储器映射(Cortex-M 典型布局) 0x0000_0000 代码区 / 向量表 0x2000_0000 SRAM 数据区 0x4000_0000 外设寄存器 0xE000_0000 内核私有外设(NVIC/SysTick) 复位源:POR / PDR / NRST / 看门狗 / 软件复位 → 从向量表取复位向量,进入确定初态

七、案例与常见误区

以一个“串口每隔 1 秒发送一次温度”的最小系统为例:上电后 POR 释放,内核从 0x0000_0000 取复位向量;启动代码把 .data 段从 Flash 搬到 SRAM、清零 .bss;随后配置 HSE 与 PLL,将 SYSCLK 切到 72MHz;使能 GPIO、ADC、UART 的时钟;初始化定时器产生 1 秒中断;主循环等待中断并读取 ADC 结果,通过 UART 发出。整条链路中,时钟树决定波特率与采样时间,复位系统决定启动是否可靠,存储器映射决定链接脚本怎么写。

  • 误区一:只改外设寄存器却不使能时钟,现象是“写进去读出来还是 0”。
  • 误区二:把 NRST 电容随意加大,导致调试器连不上或复位释放过慢。
  • 误区三:忽略总线频率上限,APB 分频设置过小导致外设时序超限。
  • 误区四:链接脚本中 SRAM 长度写错,栈溢出后表现为随机死机。
复盘方法:遇到“外设不工作”,按“时钟使能 → 引脚复用 → 寄存器配置 → 中断使能 → 总线频率”的顺序逐项排查,比盲目改代码更高效。

把这六个概念串起来看:架构决定数据通路,指令集决定代码风格,内核与外设划分职责,时钟树提供节拍,复位系统保证起点,存储器映射规定地址。它们共同构成 MCU 最小系统设计的底层坐标系,后续的电源、晶振、下载与调试电路,都是围绕这套坐标系展开的。