ARM Cortex-M3 内核与 STM32
从冯·诺依曼与哈佛结构、CISC 与 RISC、流水线技术讲起,理解 ARM 体系结构、Cortex-M3 内核(寄存器组、存储映射、NVIC),再到 STM32F10x 的系统总线、存储结构与时钟系统(5 个时钟源、RCC)。
🎯学习目标
- 理解冯·诺依曼结构与哈佛结构的区别;
- 了解 CISC 与 RISC 的区别和联系;
- 了解 ARM 体系结构(ARMv4~ARMv8 各版本与内核对应);
- 掌握 Cortex-M3 内核结构、寄存器组、存储映射、NVIC;
- 掌握 STM32 微控制器的系统总线、存储结构、时钟系统。
①体系结构基础 ⭐
冯·诺依曼结构
指令和数据放在同一个存储器,统一编址、宽度相同。
缺点:不能同时取指令又取数据(瓶颈)。
计算机五大部件:运算器、控制器、存储器、输入、输出。
哈佛结构
指令和数据独立编址、独立访问,分存于两个存储器,用两条独立总线与 CPU 交换。
优点:数据和指令可同时存取,容易实现指令流水。
ARM 存储模式(大小端)
存储器以字节为单位,每地址 8 位。32 位数据 0x12345678 存于 0x8000~0x8003:
| 模式 | 0x8000 | 0x8001 | 0x8002 | 0x8003 |
|---|---|---|---|---|
| 小端 | 0x78 | 0x56 | 0x34 | 0x12 |
| 大端 | 0x12 | 0x34 | 0x56 | 0x78 |
CISC vs RISC
| 指标 | CISC 复杂指令集 | RISC 精简指令集 |
|---|---|---|
| 指令集 | 长度不固定,大量混杂指令 | 长度固定,单周期简单指令 |
| 流水线 | 注重硬件功能,周期数多 | 用流水线降低周期数 |
| 功耗体积 | 电路丰富,体积大功耗大 | 结构简单,体积小功耗小 |
| 成本 | 硬件复杂,成本高 | 硬件简单,成本低 |
| 应用 | 通用桌面机、高性能计算机 | 嵌入式领域、移动设备 |
流水线技术
把每条指令分解为多步,各步重叠并行处理。Cortex-M3 采用三级流水线:取指(FI) → 译码(DI) → 执行(EI)。
所需时间 = 第一条完成时间 + (n−1) × 最长指令段时间。
例:取指1ns+分析3ns+执行2ns,100条指令:时间 = (1+3+2) + 99×3 = 6+297 = 303ns,吞吐率 = 100/303ns。
②ARM 与体系结构
ARM 三层含义:① 一家公司(全球半导体领先,设计 16/32 位嵌入式处理器)② 一类芯片产品统称(采用 ARM 技术的 RISC 处理器)③ 一种技术(Advanced RISC Machines 32 位 RISC 体系结构)。
ARM 体系结构版本
| 体系结构 | 位数 | 典型内核 |
|---|---|---|
| ARMv4T | 32 | ARM7TDMI、ARM9TDMI |
| ARMv5 | 32 | ARM7EJ、ARM9E |
| ARMv6 | 32 | ARM11 |
| ARMv6-M | 32 | Cortex-M0、Cortex-M0+ |
| ARMv7-M | 32 | Cortex-M3 |
| ARMv7E-M | 32 | Cortex-M4(带 FPU/DSP) |
| ARMv7-A | 32 | Cortex-A5/A9/A15 |
| ARMv8-A | 64/32 | Cortex-A53/A57 |
Cortex-M 系列对比
| 内核 | 架构 | 流水线 | FPU | 定位 |
|---|---|---|---|---|
| Cortex-M0+ | ARMv6-M | 2级 | NO | 8/16位应用,超低功耗 |
| Cortex-M0 | ARMv6-M | 3级 | NO | 低功耗低成本 |
| Cortex-M3 | ARMv7-M+哈佛 | 3级 | NO | 32位实时应用,高确定性 |
| Cortex-M4 | ARMv7-M | 3级 | YES | 32位 DSC,信号处理 |
| Cortex-M7 | ARMv7-M | 6级+分支预测 | YES | 最高性能 |
③Cortex-M3 内核 ⭐
Cortex-M3 基于 ARMv7-M 体系结构的 32 位处理器内核(数据/寄存器/存储器位宽均 32 位),采用基于哈佛结构的三级流水线,有独立的数据总线和指令总线,二者共享 4GB 寻址空间。
内核架构组件
Cortex-M3 Core
指令提取单元、译码单元、寄存器组、ALU。
NVIC
嵌套向量中断控制器,实现快速、低延迟的异常中断处理。
SysTick
24 位倒计时计数器,系统定时器,产生定时中断。
MPU
存储器保护单元,对存储区域访问保护,防止破坏关键数据。
总线矩阵
AHB 互连网络,连接内核与调试接口到外部总线,提供并行传输。
寄存器组
- 13 个通用寄存器 R0~R12(32 位);
- R13(SP 堆栈指针)、R14(LR 链接寄存器)、R15(PC 程序计数器)有专门用途;
- 特殊功能寄存器:程序状态寄存器(xPSR)、中断屏蔽寄存器(PRIMASK/FAULTMASK/BASEPRI)、控制寄存器(CONTROL)。
存储映射
采用存储器与 I/O 统一编址,将 FLASH/RAM/外设统一编址,总寻址空间 4GB(0x00000000~0xFFFFFFFF)。通过存储器地址访问外设的方式称存储器地址映射。
④NVIC 中断与异常 ⭐
异常(exception):打断程序正常执行顺序的事件。中断:来自外部片上/外扩外设的中断请求。Cortex-M3 支持 256 种异常和中断。
| 编号 | 类别 | 优先级 | 说明 |
|---|---|---|---|
| 1 | 复位 Reset | −3(最高) | 固定优先级 |
| 2 | NMI | −2 | 不可屏蔽中断 |
| 3 | HardFault | −1 | 硬错误 |
| 4~6 | MemManage/BusFault/UsageFault | 0/1/2 | 可编程 |
| 11 | SVCall | 3 | 系统服务调用 |
| 15 | SysTick | 可编程 | 系统滴答定时器 |
| 16~255 | 外部中断 IRQ#0~239 | 可编程 | 共 240 个外部中断 |
⑤STM32 系统结构
STM32F10x 是 ST 公司基于 ARM Cortex-M3 内核设计的 32 位精简指令集微控制器,最高工作频率 72MHz。
总线相关参数
- 总线宽度:同时传送的数据位数(如 32 位);
- 总线频率:工作速度,越高越快;
- 总线带宽 = 总线宽度 × 总线频率 / 8(单位 MBps)。
STM32 总线结构
AHB
Advanced High-speed Bus,先进高速总线。
APB
Advanced Peripheral Bus,先进外设总线(分 APB1/APB2)。
RCC
Reset and Clock Control,复位与时钟控制器。
FSMC
Flexible Static Memory Controller,静态存储控制器,连外部存储。
关键总线
- ICode 总线:连内核指令总线与 FLASH,指令预取;
- DCode 总线:连内核与 FLASH 数据接口,常量加载/调试;
- System 总线:连内核系统总线到总线矩阵;
- 总线矩阵:主控总线访问仲裁管理;
- DMA 总线:内存与外设间数据传输。
⑥STM32 存储与中断 ⭐
存储类型
RAM
随机存储器,存运行数据和堆栈,掉电丢失。堆栈保护断点和现场,用于中断机制。
Flash
闪存(ROM 本质),存用户程序代码,掉电不丢失,可重复擦写,容量较大。
EEPROM
电可擦可编程只读存储器,存需经常修改的非易失数据。
STM32 中断优先级分组
STM32 中断优先级分两级:抢占优先级(决定能否被打断)和响应优先级(抢占相同时排序)。STM32F103 有 60 个中断。通过 NVIC 分组分配二者位数:
| 分组 | 抢占位数 | 响应位数 |
|---|---|---|
| Group_0 | 0 位 | 4 位(0~15) |
| Group_1 | 1 位(0~1) | 3 位(0~7) |
| Group_2 | 2 位(0~3) | 2 位(0~3) |
| Group_3 | 3 位(0~7) | 1 位(0~1) |
| Group_4 | 4 位(0~15) | 0 位 |
⑦STM32 时钟系统
STM32 外设时钟复杂,需要完整时钟系统管理。时钟由 RCC(复位与时钟控制器)产生,为系统和各外设提供所需频率,确定工作速度。
⭐重点例题
答案
答案
答案
答案
答案
🎯自测(点击展开)
冯·诺依曼结构的主要缺点?
哈佛结构为什么容易实现流水?
CISC 和 RISC 的指令长度有何不同?
ARM 公司的商业模式是什么?
Cortex-M3 采用什么结构和几级流水线?
NVIC 的"优先级数值越小"意味着什么?
STM32 有几个时钟源?由什么产生?
📝强化题库
选择题点选即时判分;填空题输入后"检查"或"显示答案"。