ARM 最小系统,是让 ARM 芯片能够运行起来必不可少的最基础硬件电路,分为芯片基础支撑电路 和存储、外设接口两大部分。

RAM:随机存取存储器
分为 SRAM:静态 RAM 、DRAM:动态 RAM 两大分支
1. SRAM 静态随机存储器
- 原理:触发器电路保存数据,不需要刷新
- 特点:速度极快、电路复杂、成本高、容量小
- 应用:CPU Cache 缓存、MCU 片内 RAM、寄存器堆
- 嵌入式:STM32 片上 RAM 就是 SRAM
2. DRAM 动态随机存储器
- 原理:靠电容存电荷保存数据,必须周期性刷新,否则数据丢失 ,单元结构简单,容量容易做大
- SDRAM:同步 DRAM,跟随系统时钟
- DDR SDRAM(DDR1‑DDR5):双倍速率 DRAM,PC/ARM 开发板外接内存
- 特点:容量大、成本低,速度比 SRAM 慢
- 应用:电脑内存条,ARM 开发板外接内存颗粒
ROM:只读存储器,非易失
-
PROM(一次可编程 ROM) 用户只能烧录1 次,烧完不能擦除修改。
-
EPROM(紫外线可擦除 ROM) 紫外线照射芯片窗口擦除全部数据,需要专用烧写器,不方便,淘汰。
-
EEPROM(电可擦除 ROM) 按字节擦写,电信号擦除,不需要紫外线;适合存少量配置参数;擦写次数高,容量一般很小。
-
Flash(闪存,EEPROM 进化版,按块擦除) 分为 NOR Flash 和 NAND FlashIEEE Techn...
- NOR Flash:支持字节随机读,可以 XIP(就地执行,直接跑代码);读快、写擦慢;用于存放固件程序,STM32 片内 Flash 就是 NOR 类型。
- NAND Flash :按块读写,不能直接运行代码;容量大、成本低;用于大容量存储:U 盘、SD 卡、SSD、eMMC。

1. ALU 算术逻辑运算单元
内核运算核心,负责算术运算(加减)、逻辑运算(与或非移位),所有计算指令都在这里完成。
2. 通用寄存器 R0~R12
R0‑R12:通用数据寄存器,用于临时存放运算数据、函数参数、中间变量。
不同工作模式下,部分寄存器会发生 ** 寄存器影子(banked)** 切换。
3. 程序状态寄存器 CPSR / SPSR
- CPSR 当前程序状态寄存器:一直有效。记录 CPU 当前状态:运行模式、中断开关、条件标志位 (N/Z/C/V)。即为计算的进位、借位、结果为0、大小端控制位、工作模式控制位。
- SPSR 备份程序状态寄存器 :异常模式专用。发生中断 / 异常时,保存 CPSR 的值;异常返回时,恢复回 CPSR。用户模式下没有 SPSR。
4. 特殊功能寄存器 PC、LR、SP
- PC (R15) 程序计数器 :存下一条要取指的指令地址 ,ARM 流水线下
PC = 当前指令地址 + 8。改写 PC 就实现跳转。复位值为0,默认做自加运算。 - LR (R14) 链接寄存器:保存返回地址。函数调用、进入异常时保存返回地址;函数返回把 LR 复制回 PC。
- SP (R13) 堆栈指针 :指向栈顶地址。压栈出栈操作都依靠 SP,每种异常模式有自己独立的 SP。ARM32 标准 C 语言程序默认:FD 满递减栈(Full Descending),栈从高地址向低地址生长。
- R13=SP,R14=LR,R15=PC
5. MMU 内存管理单元
带 MMU 代表可以跑 Linux 操作系统
- 完成虚拟地址 ↔ 物理地址地址转换;
- 内存访问权限检查、内存保护;
- 开启虚拟内存后,配合 Cache 工作。
- 不带 MMU 的 MCU(STM32)不能运行标准 Linux,只能跑裸机 / FreeRTOS。
6. I‑Cache、D‑Cache 高速缓存
- I‑Cache 指令 Cache:缓存指令,把常用指令放到高速缓存,减少访问外部 Flash 内存的开销。
- D‑Cache 数据 Cache:缓存数据,读写变量数据。
- Cache 速度远快于外部 DDR 内存,解决 CPU 和内存之间速度差距。

1. AHB 高级高性能总线(Advanced High‑performance Bus)
高速总线,带宽高,支持流水线、突发传输
- 挂载设备:CPU、存储控制器、LCD 控制器
- 特点:
- 速度快,适合大数据吞吐;
- 支持突发传输、多主机;
- 用于访问存储器、LCD 这类高速设备。
2. APB 高级外设总线(Advanced Peripheral Bus)
低速外设总线,低功耗、接口简单,无流水线
- 挂载外设:IIC 控制器、GPIO 控制器、定时器控制器、UART 控制器
- 特点:
- 速度慢,功耗低;
- 接口简单,适合低速寄存器操作;
- 不能直接接 CPU,必须经过AHB‑APB 桥,把 AHB 的高速信号转换为 APB 低速信号。
- 🔔桥的作用:AHB 和 APB 之间协议转换、速度匹配。CPU 访问 APB 外设时,先访问 AHB 总线,经过桥再转发到 APB 外设。
ARM的7种工作模式:
| 模式 | 缩写 | 说明 | 进入场景 |
|---|---|---|---|
| 用户模式 | User | 普通应用程序运行模式,权限最低 | 用户程序,正常执行应用代码 |
| 高优先级中断模式 | FIQ | 高优先级中断,优先处理 | FIQ 中断触发 |
| 低优先级中断模式 | IRQ | 低优先级中断,最常用 | IRQ 中断触发 |
| 管理模式 | SVC | 操作系统内核模式,特权模式 | 上电复位、软件中断 SWI(系统调用) |
| 中止模式 | ABT | 内存访问异常 | 取址中止、数据访问中止(访问非法地址) |
| 未定义指令模式 | UND | 指令异常 | 遇到不识别的、未定义的指令 |
| 系统模式 | SYS | 特权模式,和 usr 共用寄存器,无 SPSR | 操作系统,特权任务,和用户模式寄存器完全一样 |
Cortex‑A 在 7 种基础之上,新增Monitor (MON) 监视模式
- 对应 TrustZone 安全扩展(安全世界 / 普通世界切换)
- 作用:安全世界 (Secure World) ↔ 普通世界 (Normal World) 之间切换的唯一过渡模式。
- 场景:手机安全加密、可信执行环境 TEE,安全固件运行。
- 特点:属于特权模式,拥有独立 SP、LR、SPSR;只能通过安全监控调用 SMC 指令进入。
特权模式(除 usr 以外全部 6 种)
- usr 用户模式:非特权,不能直接修改 CPSR;
- 其余 6 种都是特权模式,可以读写 CPSR,访问全部寄存器。
寄存器影子(banked)
- usr、sys 模式:共用一套 R0‑R14;
- 其他 5 种异常模式,拥有自己独立的
R13(SP)、R14(LR)、SPSR。 - 中断发生时,自动切换模式,自动使用该模式的 SP/LR,不需要手动保存栈指针。
SPSR 只有异常模式才有,用户模式没有 SPSR
异常发生时,硬件自动把当前 CPSR 保存到 SPSR;异常返回时,SPSR 恢复到 CPSR。
系统模式 sys:没有 SPSR,属于特权模式,寄存器和 usr 完全一样,用于 OS 的特权任务。
CPSR当前程序状态寄存器

| 位 | 名称 | 含义 |
|---|---|---|
| 31 | N Negative | 运算结果为负数,N=1;否则 0 |
| 30 | Z Zero | 运算结果等于 0,Z=1;否则 0 |
| 29 | C Carry | 进位 / 借位;加法有进位、减法无借位置 1 |
| 28 | V Overflow | 有符号数运算发生溢出,V=1 |
M 4:0 模式位(4‑0 位,低 5 位)
| M4:0 | 模式 | 缩写 |
|---|---|---|
| 10000 | User 用户模式 | usr |
| 10001 | FIQ 快速中断 | fiq |
| 10010 | IRQ 外部中断 | irq |
| 10011 | SVC 管理模式 | svc |
| 10110 | Monitor 监视模式 | mon(Cortex‑A TrustZone) |
| 10111 | Abort 中止模式 | abt |
| 11010 | Hyp 超级监视模式 | hyp(虚拟化) |
| 11011 | Undefined 未定义指令 | und |
| 11111 | System 系统模式 | sys |
ARM 异常处理(ARMv7‑A)
异常发生时硬件自动做的操作
当异常触发,CPU 硬件自动完成以下步骤:
-
拷贝 CPSR → SPSR_<mode> 把当前程序状态寄存器保存到对应异常模式的 SPSR 备份寄存器。用户模式没有 SPSR。
-
修改 CPSR 寄存器:
- 强制切换到ARM 状态(禁止 Thumb);
- 修改 M 4:0,切换进入对应的异常模式;
- 自动屏蔽对应中断(IRQ/FIQ)。
-
保存返回地址到 LR_<mode> LR(R14)保存异常返回地址,不同异常 LR 会有偏移。
-
PC 跳转到异常向量表对应地址 PC = 异常向量地址,开始执行异常处理函数。
-
异常处理函数执行完,需要返回,完成:
- 从 SPSR_<mode> 恢复 CPSR;
- 从 LR_<mode> 恢复 PC。
需要注意的是,在异常服务函数调用时,会首先将R0-R12寄存器的值入栈SP保护现场,完成异常服务函数后,进行出栈操作,恢复异常前的状态。
异常向量表
| 偏移量 | 异常类型 |
|---|---|
| 0x00 | Reset 复位 |
| 0x04 | Undefined Instruction 未定义指令 |
| 0x08 | Software Interrupt (SWI) 软件中断 |
| 0x0C | Prefetch Abort 取指中止 |
| 0x10 | Data Abort 数据访问中止 |
| 0x14 | Reserved 保留 |
| 0x18 | IRQ 外部中断 |
| 0x1C | FIQ 快速中断 |
- IRQ/FIQ:LR = 中断点指令地址,返回用
SUBS PC,LR,#4 - SVC / Undefined:LR 已经指向正确返回点,返回用
MOVS PC,LR - Data Abort:LR = 出错指令 + 8,返回
SUBS PC,LR,#8 - Prefetch Abort:LR = 出错指令 + 4,返回
SUBS PC,LR,#4
| 异常类型 | 异常发生阶段 | LR 保存的值 | 返回指令 |
|---|---|---|---|
| IRQ/FIQ/undef/SWI/Prefetch Abort | 取指阶段 | PC‑4 | MOVS PC,LR |
| Data Abort 数据中止 | 执行阶段访问内存出错 | PC‑8 | SUB PC,LR,#8 |