Main-仙夕
从零开始的STM32生活————拜访芯片家族
芯片家族里都有谁?
我们首先要先来看看,我们使用的芯片,它的内部有什么呢?是如何来实现功能的呢?
简要来说,一个封装好的芯片由:
-
内核:即CPU
-
外设:GPIO,USART,I2C等等
这两部分可以理解成一个人,内核就是大脑,外设就是身体的其他部分。
那你可能会问:大脑通过神经通路传递指令,那我们的内核和外设呢?它们是怎么工作的?
🤯这里我需要带大家具体探索一下芯片家族成员:
-
I-Code总线
-
驱动单元:D-Code总线,System总线,DMA总线(内核家庭)
-
被动单元:Flash,SRAM,FSMC,AHB和APB(外设家庭)
I-Code总线
虽然它也叫“总线”,但大家记住,它可不是内核家族的成员!
I-Code总线生下来就带着芯片家族的使命,那就是读取指令
什么是读取指令呢?
我们的程序通过编译器后是很多条“指令”,这些“指令”存放在我们之前提到过的Flash里。我们的ICode总线需要把指令读取出来给内核
I-Code:我不生产指令,我只是指令的搬运工。
驱动单元家庭
D-code总线
D-code的“D”指的是“Data”,很显然啊,它是用来取数据的。我们在写代码时的数据,一般分为:
-
常量:用“const”修饰,代表不可改变的数,存放在Flash
-
变量:存放在SRAM
但是除了D-Code总线能访问数据,它的家人DMA总线也可以,所以我们使用总线矩阵来仲裁用哪个总线(后文会详细介绍)
System总线
它是专门负责访问外设寄存器的总线,我们读写寄存器都要通过它。
DMA总线
DMA总线是家里的“大哥”,它既可以访问外设寄存器,又可以访问SRAM,甚至是内部的Flash
那内核家庭肯定不允许这个“大哥”只手遮天。所以“总线矩阵”被创造了出来。
😺总线矩阵
总线矩阵是一个交叉开关(Crossbar)结构,允许多个主设备同时访问不同的从设备(只要路径不冲突)。它的核心作用是:
-
并行访问:例如CPU通过D-Code总线读取Flash时,DMA可以同时通过另一条总线访问SRAM。
-
优先级仲裁:当多个主设备竞争同一从设备时(如CPU和DMA同时访问SRAM),总线矩阵根据预设规则决定谁先访问。
典型优先级:I-Code(CPU取指令) > D-Code(CPU取数据) > System总线(CPU访问SRAM/外设) > DMA
注:指令是我们“大脑”需要的指令,当然要优先读取,DMA只是作为辅助工具,从此堕落神坛。(垄断终被制裁!人民万岁!)
被动单元家庭
Flash
Flash是我们内部的闪存存储器,内核会通过I-Code总线读取里面的指令
SRAM
也就是RAM,我们的栈堆和变量等等存储在里面,内核通过D-Code访问它。
类比理解 SRAM 和 Flash
存储类型 | 类比 | 特点 |
---|---|---|
Flash | 电脑的 硬盘 | 长期存储程序代码、常量(掉电不丢失,但速度慢) |
SRAM | 电脑的 内存条 | 临时存储变量(速度快,掉电丢失) |
SRAM 和 Flash 的区别
特性 | SRAM | Flash |
---|---|---|
速度 | ⚡ 超快(CPU 直接读写) | 🐢 较慢(需要等待) |
掉电后 | 数据丢失 | 数据保留 |
用途 | 变量、堆栈、动态数据 | 程序代码、常量数据 |
大小 | 较小(几KB~几百KB) | 较大(几十KB~几MB) |
编程时,有些软件会显示SRAM里的占用情况,例如Keil。
FSMC
FSMC即“灵活的静态储存器控制器”,是我们芯片家族的“翻译官”。
FSMC(Flexible Static Memory Controller):
-
“Static”(静态):只能接 静态存储器(如 SRAM、NOR Flash),不能接 动态存储器(如 SDRAM)。
-
“Flexible”(灵活):支持多种存储设备,且可以配置不同的访问时序。
在实际中,我们的芯片家族往往要接待许多歪果仁(如SRAM,NORFlash),我们的内核语言无法交流啊。这时候需要它来翻译,让内核可以像控制内部寄存器一样控制它们。
这个功能我们称之为:“内部映射”,即把外接芯片 映射到它的内存地址空间
-
外接 SRAM 被映射到
0x60000000
~0x6007FFFF
(512KB)。 -
你读写这个地址范围时,FSMC 自动操作外接芯片。
AHB和APB
STM32 的总线系统像一座城市的交通网络,不同道路承担不同任务:
-
AHB:高速公路(高速数据流,连接核心部件)。
-
APB:普通公路(低速但灵活,连接外设
对比 AHB 和 APB
特性 | AHB | APB |
---|---|---|
速度 | 高速(= CPU 主频) | 低速(≤ AHB 的 1/2) |
协议复杂度 | 高(支持突发、流水线) | 低(单次传输) |
连接设备 | CPU、DMA、内存 | USART、GPIO、TIMER 等外设 |
功耗 | 高 | 低 |