STM32初探:探访芯片家族的旅程

Main-仙夕

从零开始的STM32生活————拜访芯片家族

芯片家族里都有谁?

我们首先要先来看看,我们使用的芯片,它的内部有什么呢?是如何来实现功能的呢?

简要来说,一个封装好的芯片由:

  1. 内核:即CPU

  2. 外设:GPIO,USART,I2C等等

这两部分可以理解成一个人,内核就是大脑,外设就是身体的其他部分。

那你可能会问:大脑通过神经通路传递指令,那我们的内核外设呢?它们是怎么工作的?

🤯这里我需要带大家具体探索一下芯片家族成员:

  1. I-Code总线

  2. 驱动单元:D-Code总线,System总线,DMA总线(内核家庭)

  3. 被动单元:Flash,SRAM,FSMC,AHB和APB(外设家庭)


I-Code总线

虽然它也叫“总线”,但大家记住,它可不是内核家族的成员!

I-Code总线生下来就带着芯片家族的使命,那就是读取指令

什么是读取指令呢?

我们的程序通过编译器后是很多条“指令”,这些“指令”存放在我们之前提到过的Flash里。我们的ICode总线需要把指令读取出来给内核

I-Code:我不生产指令,我只是指令的搬运工。


驱动单元家庭

D-code总线

D-code的“D”指的是“Data”,很显然啊,它是用来取数据的。我们在写代码时的数据,一般分为:

  1. 常量:用“const”修饰,代表不可改变的数,存放在Flash

  2. 变量:存放在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 等外设
    功耗

    作者:仙夕—Main

    物联沃分享整理
    物联沃-IOTWORD物联网 » STM32初探:探访芯片家族的旅程

    发表回复