1. 系统结构

[[C-资料/03-附件/bcfd9d52ced7378092708df2b31c1728_MD5.jpg|Open: image-3.png]]
![[C-资料/03-附件/bcfd9d52ced7378092708df2b31c1728_MD5.jpg]]

这张图是STM32的“城市规划图”,它展示了芯片内部各个功能模块是如何连接和协同工作的。初看会觉得很复杂,全是方框和箭头,但别怕,我们把它想象成一个城市的交通系统,就很容易理解了。

这张图的核心可以分为三个部分:

  1. 核心处理单元 (CPU):城市的“市政府大脑”。
  2. 存储单元:城市的“图书馆”和“仓库”。
  3. 总线和外设:城市的“交通网络”和“公共服务设施”。

我们来一步步拆解这张“城市规划图”。

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 - “图书馆”与“高速仓库”

  • 图中位置: 右上方的 FlashSRAM
  • 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)
  • 图中位置: 右下方的 APB1APB2
  • 通俗比喻: 这是城市的“普通公路”或“辅路”,连接着那些不需要那么高速度的“公共服务设施”。
  • 讲解: 为了节省功耗和设计复杂度,STM32把外设分成了两类,挂载在两条不同的APB总线上。它们通过“桥 (Bridge)”连接到AHB主干道上。
    • APB2 总线 (高速外设总线)
      • 比喻: 速度较快的“辅路”。
      • 挂载设备: 图中 APB2 下方的设备,如 GPIO、ADC、TIM1、SPI1、USART1 等。这些外设通常需要较快的响应速度或工作在较高的时钟频率下。(比如ADC采样、高速串口通信)。
    • APB1 总线 (低速外设总线)
      • 比喻: 速度较慢的“辅路”。
      • 挂载设备: 图中 APB1 下方的设备,如 TIM2-TIM7、USART2/3、I2C、CAN、DAC 等。这些外设的工作时钟频率通常比APB2上的要低。

为什么要有不同的总线?
这就像城市交通规划,不能所有车都挤在高速上。把不同速度的设备分开,可以:

  1. 提高效率: 高速设备在AHB上畅通无阻,不受低速设备影响。
  2. 降低功耗: APB总线可以用较低的时钟频率运行,从而节省电能。
1.3.3. 3.3 特殊的“搬运工”:DMA (Direct Memory Access)
  • 图中位置: 左侧的 DMA1DMA2
  • 通俗比喻: 两个独立的“物流公司”,每个公司有多条“运输专线”(通道)。
  • 讲解:
    • 当外设(比如ADC)需要把大量数据传输到内存(SRAM)时,它可以不经过CPU,而是直接向DMA发出一个“DMA请求”(看图中最下方的箭头)。
    • DMA收到请求后,就会像一个勤劳的搬运工,通过AHB总线这个“高速公路”,直接把数据从ADC搬到SRAM。
    • 搬运完成后,DMA可以通知CPU:“老板,货搬完了!”
    • 好处: 在DMA搬运数据期间,CPU这个“大脑”可以去处理其他更重要的事情,大大提高了整个系统的运行效率。这就是所谓的“CPU减负”。

1.4. 总结一下整个工作流程

  1. 上电启动RCC(图中未明确标出,但它内嵌在AHB系统总线模块中)这个“心脏”开始工作,为整个芯片提供时钟信号(心跳)。
  2. CPU取指令Cortex-M3 通过 ICode 总线从 Flash(图书馆)里读取程序指令。
  3. CPU执行指令
    • 如果需要处理数据,CPU通过 DCode 总线在 SRAM(高速仓库)中读写变量。
    • 如果需要配置一个外设,比如点亮一个灯,CPU通过 System 总线 -> 总线矩阵 -> AHB -> -> APB2,找到对应的 GPIO 寄存器,写入控制命令。
  4. 外设与DMA协同工作
    • 比如,我们要用 ADC1 连续采集1000个数据。
    • CPU先配置好 ADC1DMA1
    • ADC1 每完成一次转换,就向 DMA1 发出一个 DMA请求
    • DMA1 响应请求,通过AHB总线将采集到的数据从 ADC1 直接搬运到 SRAM 的指定位置。
    • 这个过程CPU完全不参与,可以去干别的事。
    • 当1000个数据全部搬完后,DMA1 产生一个中断,通知CPU数据采集完成。

通过这张图,我们可以清晰地看到STM32是一个高度集成和协同工作的系统。理解了这张“城市规划图”,你就能明白为什么在写程序时,第一步总是要先配置RCC来使能各个外设的时钟——因为不给“公共服务设施”供电(提供时钟),它们是无法工作的。

Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐