STM32初学---总线:AHB、AHP / EEPROM、SPI FLASH、EMMC

1. 总线

1.1 总线概念

总线 = 芯片内部各个模块之间"传输数据的公共通道"

CPU 通过总线:

  • 读外设寄存器
  • 写外设寄存器
  • 访问 Flash / SRAM

1.2 多种总线

为什么 STM32 要有"多种总线"?
如果 所有模块都挤在一条总线上:

  • 速度慢
  • 冲突多
  • 功耗高

所以 STM32 把不同"速度 / 功能"的模块放在不同等级的总线上。

这就是你在数据手册里看到的:AHB / APB1 / APB2 ...

1.3 STM32 常见的几种总线

(1)AHB(Advanced High-performance Bus)

特点:高速、主干总线

一般连接:

  • CPU(Cortex-M)
  • Flash
  • SRAM
  • DMA
  • 总线桥(APB Bridge)

(2)APB(Advanced Peripheral Bus)

特点:低速、简单、省功耗

分成两条(以 STM32F1/F4 为例):

总线 典型外设
APB1 USART2/3、I2C、SPI2、TIM2~7
APB2 GPIO、USART1、SPI1、TIM1

结构可以表示为:

javascript 复制代码
          CPU
           |
          AHB  ← 高速主干
      ┌────┼────┐
    Flash  SRAM  DMA
                 |
               APB Bridge
              ┌──────┬──────┐
           APB1      APB2
        (低速外设)  (高速外设)

1.4 写代码时"总线很重要"

例如:外设挂在哪条总线 → 决定时钟怎么开

你一定会写过:

复制代码
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

为什么是 APB2

👉 因为 GPIOA APB2 总线上

如果你写错成 APB1

1、编译不报错

2、程序不工作

1.5 总线频率 ≠ CPU 频率

例如:

java 复制代码
CPU:72 MHz
APB1:36 MHz(通常被限制为 ≤36MHz)
APB2:72 MHz

这会影响:

1、定时器计数频率

2、串口波特率

3、I2C 时序

1.6 总线矩阵

总线矩阵 = 芯片内部的"智能交通枢纽"

负责:谁可以同时访问谁、走哪条路、不互相堵车

结构上,总线矩阵 = 多个"主设备(Master)"可以 并行访问多个"从设备(Slave)"。

1.6.1 Master 与 Slave

Master(发起访问的一方)

  • CPU(Cortex-M)
  • DMA
  • USB / Ethernet(高级芯片)

Slave(被访问的一方)

  • Flash
  • SRAM
  • 外设寄存器
  • APB Bridge

当两个 Master 访问同一个 Slave

javascript 复制代码
CPU  ─┐
      ├── SRAM
DMA  ─┘

这时:

  • 总线矩阵会 仲裁(Arbitration)
  • 一方等,一方先走

现象:

  • DMA 传输变慢
  • CPU 延迟增大

1.6.2 总线矩阵 vs AHB / APB 的关系

概念 是什么
AHB / APB "道路等级"
总线矩阵 "交通调度系统"

1.7 APB Bridge

APB Bridge是总线之间的"中转站"。

1.7.1 APB Bridge在系统中的位置

javascript 复制代码
CPU / DMA
    │
   AHB   ← 高速
    │
┌───▼─────────┐
│  APB Bridge │  ← 关键角色
└───▲─────────┘
    │
   APB1 / APB2  ← 低速
    │
GPIO / TIM / USART

1.7.2 APB Bridge的作用

①协议转换

APB Bridge 把 AHB 的访问"翻译"为 APB 能懂的访问;

②时钟域隔离

AHB:高频(如 72MHz)

APB1:低频(如 36MHz)

👉 Bridge 会:

等 APB 空闲

再慢慢完成一次访问

📌 此时就会感觉:"访问外设比访问 SRAM 慢"

③地址解码 + 分发

CPU 只发地址:eg:0x4001 100C

APB Bridge 会判断:

  • 属于 APB1?还是 APB2?
  • 转给 GPIO 还是 TIM?

Bridge 永远存在、自动工作,不用"配置"它。

2、EEPROM、SPI FLASH、EMMC

EEPROM / SPI Flash / eMMC 本质上都属于**"非易失性存储器"。

2.1 EEPROM

2.1.1 概念

EEPROM用来存"小量、经常改、很重要"的数据;

典型用途:

  • 设备参数(ID、地址、校准值)
  • 用户配置
  • 掉电要保存的状态

📌 特点:

  • 断电不丢
  • 写得慢
  • 容量小
  • 可单字节读写

2.1.2 分类

在 STM32 里,有芯片内部 EEPROM,外部 EEPROM(最常见)。
✔ 情况 1:芯片内部 EEPROM(部分 STM32 有,如 STM32L 系列)

  • 像 RAM 一样访问
  • 容量很小(几 KB)

✔ 情况 2:外部 EEPROM(最常见)

  • 芯片:AT24C02 / 24C04
  • 接口:I2C
  • 容量:256B ~ 几十 KB

使用时:STM32 ──I2C── EEPROM

✔ 情况 3:用 Flash 模拟 EEPROM(很多 STM32F1 都是这样)

  • 用 Flash 的一小块
  • 软件实现"擦写管理"

2.1.3 EEPROM的特性

特性 说明
写入方式 可以按字节
写入速度 很慢
擦写寿命 10 万~100 万次

3、SPI Flash

3.1 概念

用来存"较大量数据,不经常改"。

典型用途:

  • 数据日志(CSV)
  • 波形数据
  • 图片 / 字库
  • 固件升级包

常见芯片:W25Q16 / W25Q64 / W25Q128

容量:2MB / 8MB / 16MB / 128MB(常见)

3.2 SPI Flash特性

特性 说明
最小写单位 Page(256B)
最小擦除 Sector(4KB)
写前必须擦
擦写寿命 ~10 万次

注意:

1、不能像 EEPROM 那样随便改一个字节

2、 必须"擦一整块再写"

4、eMMC

4.1 概念

用来存"超大量数据 + 文件系统 + 操作系统",是一个一个"自带管理芯片的 Flash 硬盘"。

典型用途:

  • Linux 开发板
  • 工控机
  • 树莓派 / 飞思卡尔 / 瑞芯微
  • 不常见于"裸机 STM32"

使用复杂度

  • 项目 eMMC
  • 接口 SDIO / MMC
  • 是否要文件系统 是
  • 是否适合裸机 ❌

📌 一般 STM32 + 裸机 / RTOS 很少直接用 eMMC。

4.2 EEPROM、SPI FLASH、EMMC对比

项目 EEPROM SPI Flash eMMC
容量 很小 中等 很大
接口 I2C SPI / QSPI SDIO
是否可字节写
是否常改
是否跑系统

总结:

  • EEPROM:小、慢、常改,存参数
  • SPI Flash:大、块擦、少改,存数据
  • eMMC:超大、复杂,跑系统
相关推荐
saoys6 小时前
Opencv 学习笔记:图像掩膜操作(精准提取指定区域像素)
笔记·opencv·学习
电子小白1237 小时前
第13期PCB layout工程师初级培训-1-EDA软件的通用设置
笔记·嵌入式硬件·学习·pcb·layout
清风6666667 小时前
基于单片机的多传感器智能云梯逃生控制器设计
单片机·嵌入式硬件·毕业设计·智能家居·课程设计
小何code7 小时前
STM32入门教程,第10课(上),OLED显示屏
stm32·单片机·嵌入式硬件
来自晴朗的明天7 小时前
高速画板-USB模块的PCB设计5-USB2.0/3.0布局布线要求
单片机·嵌入式硬件·硬件工程
clorisqqq9 小时前
人工智能现代方法笔记 第1章 绪论(1/2)
人工智能·笔记
charlie1145141919 小时前
嵌入式现代C++教程: 构造函数优化:初始化列表 vs 成员赋值
开发语言·c++·笔记·学习·嵌入式·现代c++
早日退休!!!10 小时前
ARM Cortex-M核 【保存上下文&恢复上下文】
arm开发·单片机·嵌入式硬件
wdfk_prog10 小时前
[Linux]学习笔记系列 -- [fs]seq_file
linux·笔记·学习
liuchangng10 小时前
Open-AutoGLM部署运行笔记
笔记