嵌入式基础-STM32系统结构
·
1. 系统结构
![[[C-资料/03-附件/bcfd9d52ced7378092708df2b31c1728_MD5.jpg|Open: image-3.png]]
![[C-资料/03-附件/bcfd9d52ced7378092708df2b31c1728_MD5.jpg]]](https://i-blog.csdnimg.cn/direct/2ba009b7348e4866a89b6fc9e4770e88.png)
这张图是STM32的“城市规划图”,它展示了芯片内部各个功能模块是如何连接和协同工作的。初看会觉得很复杂,全是方框和箭头,但别怕,我们把它想象成一个城市的交通系统,就很容易理解了。
这张图的核心可以分为三个部分:
- 核心处理单元 (CPU):城市的“市政府大脑”。
- 存储单元:城市的“图书馆”和“仓库”。
- 总线和外设:城市的“交通网络”和“公共服务设施”。
我们来一步步拆解这张“城市规划图”。
1.1. 1. 核心处理单元:Cortex-M3 - 城市的“市政府大脑”
- 图中位置: 左上角的
Cortex-M3方框。 - 通俗比喻: 这是整个STM32芯片的“大脑”,负责思考和决策。我们编写的所有C语言或汇编代码,最终都是由它来执行的。它决定了什么时候去读取传感器数据,什么时候去控制灯亮,什么时候去发送信息。
- 图中细节解释:
- ICode (指令总线): 大脑思考需要“知识”,这些“知识”就是我们写的程序代码,存放在Flash(图书馆)里。ICode就是一条专用高速公路,大脑通过它快速地从Flash里读取指令(程序代码)。
- DCode (数据总线): 大脑在思考过程中需要读取或存储一些临时数据(比如计算的中间结果),这些数据通常放在SRAM(高速仓库)里。DCode就是另一条专用高速公路,大脑通过它来快速读写SRAM里的数据。
- System (系统总线): 这是一条“普通公路”,大脑通过它来访问和配置那些速度要求不高的“公共服务设施”(外设),比如设置一个GPIO引脚是输入还是输出。
- DMA (DMA总线): 大脑可以不亲自干活,而是委托“搬运工”(DMA)去搬数据。这条总线就是大脑给DMA下达指令的通道。
小结: Cortex-M3这个“大脑”非常聪明,它有多条不同的“公路”连接到城市的各个地方,可以同时、高效地处理不同的事情。
1.2. 2. 存储单元:Flash 和 SRAM - “图书馆”与“高速仓库”
- 图中位置: 右上方的
Flash和SRAM。 - Flash (闪存)
- 通俗比喻: 城市的“图书馆”。
- 讲解: 它用来存放我们的程序代码。它的特点是容量大、断电不丢失。就像图书馆里的书,关门了(断电了)书还在。所以我们的程序烧录进去后,下次上电还能继续运行。
- SRAM (静态随机存取存储器)
- 通俗比喻: 城市的“高速仓库”或你大脑里的“短期记忆”。
- 讲解: 它用来存放程序运行时产生的各种变量和临时数据。它的特点是速度非常快,但断电后数据就全部丢失了。就像你大脑里的短期记忆,睡一觉可能就忘了。CPU处理数据时,会把数据放在SRAM里,因为读写速度快,效率高。
1.3. 3. 交通网络与公共服务:总线和外设
这是这张图最核心、最复杂的部分。我们可以把它看作城市的交通系统,连接着市政府和各个公共服务设施。
1.3.1. 3.1 城市主干道:AHB 总线 (Advanced High-performance Bus)
- 图中位置: 中间的
AHB 系统总线。 - 通俗比喻: 这是城市的“高速环路”或“主干道”,连接着所有需要高速运行的部门。
- 讲解: 所有对速度要求高的设备都挂载在AHB总线上。从图中可以看到,连接到AHB总线上的有:
- CPU内核 (Cortex-M3):通过总线矩阵连接。
- 存储器 (Flash, SRAM):程序和数据访问必须快。
- DMA:“搬运工”必须走高速路才能体现效率。
- FSMC, SDIO:这些连接外部存储器的控制器,也需要高速传输。
- 桥 (Bridge):连接到低速公路的“立交桥”。
1.3.2. 3.2 城市次干道:APB 总线 (Advanced Peripheral Bus)
- 图中位置: 右下方的
APB1和APB2。 - 通俗比喻: 这是城市的“普通公路”或“辅路”,连接着那些不需要那么高速度的“公共服务设施”。
- 讲解: 为了节省功耗和设计复杂度,STM32把外设分成了两类,挂载在两条不同的APB总线上。它们通过“桥 (Bridge)”连接到AHB主干道上。
- APB2 总线 (高速外设总线):
- 比喻: 速度较快的“辅路”。
- 挂载设备: 图中
APB2下方的设备,如 GPIO、ADC、TIM1、SPI1、USART1 等。这些外设通常需要较快的响应速度或工作在较高的时钟频率下。(比如ADC采样、高速串口通信)。
- APB1 总线 (低速外设总线):
- 比喻: 速度较慢的“辅路”。
- 挂载设备: 图中
APB1下方的设备,如 TIM2-TIM7、USART2/3、I2C、CAN、DAC 等。这些外设的工作时钟频率通常比APB2上的要低。
- APB2 总线 (高速外设总线):
为什么要有不同的总线?
这就像城市交通规划,不能所有车都挤在高速上。把不同速度的设备分开,可以:
- 提高效率: 高速设备在AHB上畅通无阻,不受低速设备影响。
- 降低功耗: APB总线可以用较低的时钟频率运行,从而节省电能。
1.3.3. 3.3 特殊的“搬运工”:DMA (Direct Memory Access)
- 图中位置: 左侧的
DMA1和DMA2。 - 通俗比喻: 两个独立的“物流公司”,每个公司有多条“运输专线”(通道)。
- 讲解:
- 当外设(比如ADC)需要把大量数据传输到内存(SRAM)时,它可以不经过CPU,而是直接向DMA发出一个“DMA请求”(看图中最下方的箭头)。
- DMA收到请求后,就会像一个勤劳的搬运工,通过AHB总线这个“高速公路”,直接把数据从ADC搬到SRAM。
- 搬运完成后,DMA可以通知CPU:“老板,货搬完了!”
- 好处: 在DMA搬运数据期间,CPU这个“大脑”可以去处理其他更重要的事情,大大提高了整个系统的运行效率。这就是所谓的“CPU减负”。
1.4. 总结一下整个工作流程
- 上电启动:
RCC(图中未明确标出,但它内嵌在AHB系统总线模块中)这个“心脏”开始工作,为整个芯片提供时钟信号(心跳)。 - CPU取指令:
Cortex-M3通过ICode总线从Flash(图书馆)里读取程序指令。 - CPU执行指令:
- 如果需要处理数据,CPU通过
DCode总线在SRAM(高速仓库)中读写变量。 - 如果需要配置一个外设,比如点亮一个灯,CPU通过
System总线 ->总线矩阵->AHB->桥->APB2,找到对应的GPIO寄存器,写入控制命令。
- 如果需要处理数据,CPU通过
- 外设与DMA协同工作:
- 比如,我们要用
ADC1连续采集1000个数据。 - CPU先配置好
ADC1和DMA1。 ADC1每完成一次转换,就向DMA1发出一个DMA请求。DMA1响应请求,通过AHB总线将采集到的数据从ADC1直接搬运到SRAM的指定位置。- 这个过程CPU完全不参与,可以去干别的事。
- 当1000个数据全部搬完后,
DMA1产生一个中断,通知CPU数据采集完成。
- 比如,我们要用
通过这张图,我们可以清晰地看到STM32是一个高度集成和协同工作的系统。理解了这张“城市规划图”,你就能明白为什么在写程序时,第一步总是要先配置RCC来使能各个外设的时钟——因为不给“公共服务设施”供电(提供时钟),它们是无法工作的。
openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐


所有评论(0)