目录
[一、 CPU 内部的微观世界](#一、 CPU 内部的微观世界)
[1. 三大核心部件](#1. 三大核心部件)
[2. 指令的绝对控制权](#2. 指令的绝对控制权)
[二、 指针与总线的"灵魂羁绊"](#二、 指针与总线的“灵魂羁绊”)
[三、 Cortex-M3 终极总线架构](#三、 Cortex-M3 终极总线架构)
[1. 统一编址与总线矩阵的"硬件路由"](#1. 统一编址与总线矩阵的“硬件路由”)
[2. 硬件阵营划分](#2. 硬件阵营划分)
[四、 软件架构的进化:裸机 vs 内核](#四、 软件架构的进化:裸机 vs 内核)
[1. 裸机 (Bare-metal):前后台系统](#1. 裸机 (Bare-metal):前后台系统)
[2. 内核 (Kernel / RTOS):接管 PC 的后台 Boss](#2. 内核 (Kernel / RTOS):接管 PC 的后台 Boss)
[五、 外设与通信协议底层机制](#五、 外设与通信协议底层机制)
[1. SPI 的"移位交换"本质](#1. SPI 的“移位交换”本质)
[2. 内部 Flash 的页操作 (FLASH_PAGE_SIZE)](#2. 内部 Flash 的页操作 (FLASH_PAGE_SIZE))
一、 CPU 内部的微观世界
CPU 是一个永远不知疲倦执行"取指 -> 译码 -> 执行"死循环的硬件机器。
1. 三大核心部件
-
CU (控制器/译码器): CPU的"大脑皮层"。负责切分指令(机器码),翻译操作码 (干什么)和操作数(用谁干),并向外部总线发送物理电平信号。
-
ALU (运算器): CPU的"算盘"。纯粹的硬件电路,负责加减乘除和逻辑移位。
-
Registers (寄存器组): CPU的"极速口袋"。分为特殊寄存器(PC、SP、PSR)和通用寄存器(R0-R15),是 ALU 干活时的数据暂存区。
2. 指令的绝对控制权
-
指令本身(如
LDR R0, [R1]的机器码)不包含物理路径(不写明去Flash还是SRAM)。 -
指令只下达动作(读/写),目标地址(由操作数提供)才是决定数据去向的唯一凭证。
二、 指针与总线的"灵魂羁绊"
总线是数据的高速公路,而核心指针是驱动总线跑起来的"源动力"与"导航仪"。
| 核心指针 | 驱动的总线 | 物理目的地 | 存储内容类型 | 运动规律 |
|---|---|---|---|---|
| PC (程序计数器) | ICode (指令总线) | Flash (0x0800...) |
机器码 (死代码) | 单向递增 (+2 / +4),遇到跳转才突变 |
| SP (堆栈指针) | System (系统总线) | SRAM (0x2000...) |
现场寄存器、局部变量 (活数据) | 双向伸缩 (入栈减小,出栈增大) |
三、 Cortex-M3 终极总线架构
系统的运行本质,就是主设备 通过总线矩阵 去读写从设备。
1. 统一编址与总线矩阵的"硬件路由"
-
统一编址: 4GB 的虚拟地址空间,Flash、SRAM、外设全在一张地图上。
-
总线矩阵 (Bus Matrix): 硬件级的"分拣中心"。CPU 丢出一个地址,总线矩阵只看地址前缀:
-
0x08开头 \\rightarrow 连通 Flash。 -
0x20开头 \\rightarrow 连通 SRAM。 -
0x40开头 \\rightarrow 切入 AHB/APB 桥访问外设。
-
2. 硬件阵营划分
-
主设备 (Masters) - 发号施令:
-
CPU: 拥有 ICode(取指)、DCode(读常量)、System 总线(读写变量/外设)。
-
DMA: 拥有独立总线的"二当家"。被 CPU 配置激活后,能脱离 CPU,直接接管总线在 SRAM 和外设间高速搬运数据。
-
-
从设备 (Slaves) - 被动响应:
-
Flash (只读)、SRAM (读写)。
-
AHB (高速外设主干道): 挂载 DMA、RCC 等吃性能的外设。
-
APB (低速外设慢车道): 经过 AHB2APB 桥接降速。分为 APB2(高速区,如 SPI1、USART1、GPIO)和 APB1(低速区,如 IIC、普通定时器)。
-
四、 软件架构的进化:裸机 vs 内核
1. 裸机 (Bare-metal):前后台系统
-
绝对统治: 你的
main()函数里的while(1)是唯一的死循环。 -
架构:
-
后台:
while(1)轮询处理普通任务,顺序执行,实时性差。 -
前台: 纯硬件中断(NVIC)打断 PC 指针去处理紧急事件。
-
-
没有内核! 启动文件(汇编配置环境)、HAL库(被动函数箱)、中断(硬件机制)都不是内核。
2. 内核 (Kernel / RTOS):接管 PC 的后台 Boss
-
四大核心职能: 任务调度、内存(堆栈)管理、硬件抽象、进程间通信(队列/锁)。
-
任务切换的底层真相: 利用 SysTick 硬件定时器产生固定中断(如 1ms)。中断强行暂停当前任务,内核将当前 CPU 寄存器压入该任务的独立堆栈(SP向下移),然后把下一个任务的堆栈数据弹回 CPU 寄存器(恢复现场),PC 指针跳跃执行新任务。
五、 外设与通信协议底层机制
1. SPI 的"移位交换"本质
-
架构: 同步、串行、全双工、一主多从(消耗片选 SS 线资源)。
-
速度优势: 相比 IIC(开漏输出+上拉电阻,RC充电慢),SPI 使用推挽输出,电平跳变极快。
-
底层真谛: "移位寄存器的字节交换"。
-
时钟跳变产生移位边沿:主机和从机的 8 位寄存器同时左移,高位挤出到数据线。
-
时钟跳变产生采样边沿:双方同时吸入数据线上的电平补到最低位。
-
8 次时钟完成一次完美的字节互换。
-
-
单向通信变通: 只发不收(丢弃读回的数据),只收不发(发
0xFF假数据套取有效数据)。
2. 内部 Flash 的页操作 (FLASH_PAGE_SIZE)
-
硬件特性: Flash 写入只能把
1变0。要把0变回1必须执行擦除。 -
擦除粒度: 擦除操作的最小物理单位是**"页 (Page)"**或"扇区 (Sector)"。哪怕只改 1 个字节,也要把整页读到 RAM 备份,擦除整页,再重新写回。