🟦 u5-07 总线与 DMA:系统互联与数据传输
🟦 STM32U575 数据手册初学者精讲 · 第 7 / 10 章
🗨️ U575 的系统总线采用多主多从的 AHB 矩阵,DMA 系统分为高速 GPDMA 和低功耗 LPDMA,DMA2D 还能加速图形搬运。
这一章在干嘛? 理解总线架构和 DMA 怎么传数据,是做高性能/低功耗驱动的关键。
多 AHB 总线矩阵:谁可以访问谁
U575 内部有一个 32-bit multi-AHB bus matrix。你可以把它理解为高速公路网:
| 总线主设备 | 说明 |
| Cortex-M33 I-bus/D-bus | CPU 取指令和读数据 |
| GPDMA1 / LPDMA1 | DMA 控制器搬运数据 |
| SDMMC | SD 卡直接读写 |
| 总线从设备 | 说明 |
| Flash | 程序代码 |
| SRAM1/2/3/4 | 运行时数据 |
| AHB-to-APB 桥 | 通往所有 APB 外设 |
| FSMC / OCTOSPI | 外部存储器接口 |
总线矩阵允许多个主设备同时访问不同的从设备。例如 CPU 读 Flash 的同时,DMA 搬 SRAM 的数据到外设。
GPDMA1:通用 DMA,16 个通道
GPDMA1 是主力 DMA,支持:
- 16 个独立通道,每个通道可配置源/目标地址、数据宽度、传输方向。
- 外设到存储器、存储器到外设、存储器到存储器。
- 链表模式:可以把多个传输节点串起来,自动执行。
典型用法:
- ADC 采样结果 → DMA → SRAM 数组
- UART RX → DMA → 环形缓冲区
- TIM PWM → DMA → GPIO/外设
使用 DCACHE 时,DMA 传输前要 SCB_CleanDCache(),传输后 SCB_InvalidateDCache(),否则 CPU 和 DMA 看到的数据可能不一致。
LPDMA1:低功耗 DMA
LPDMA1 只有 4 个通道,但它属于 低功耗域,在 Stop 模式下仍可工作,是 LPBAM 的核心。
LPBAM 的典型组合:
- LPTIM1 定时触发 ADC4 采样
- LPDMA1 把 ADC4 数据搬到 SRAM4
- CPU 保持在 Stop 模式省电
- 数据量达到阈值后,LPDMA 中断唤醒 CPU
做电池采集、环境传感器等应用时,LPDMA + LPTIM + ADC4 是低功耗的黄金组合。
DMA2D:图形加速器
DMA2D 专门用于图形数据搬运:
- 位图填充、颜色格式转换(如 RGB565 ↔ ARGB8888)
- 两层图像 Alpha 混合
- 把显存内容搬到 LCD 接口
如果你给 U575 配了显示屏,DMA2D 能显著降低 CPU 负担。
外设互联矩阵
U575 很多外设可以通过内部触发信号互联,而不经过 CPU:
- TIM 触发 ADC 采样
- ADC 采样完成触发 DMA
- COMP 输出触发 TIM 刹车
- LPTIM 触发 LPDMA
善用外设互联,可以把很多实时控制交给硬件,CPU 只负责策略层。
🧠 小测验GPDMA 和 LPDMA 的主要区别是什么?
GPDMA 是高速主力 DMA;LPDMA 属于低功耗域,Stop 模式下仍可工作。
为什么 DMA + DCACHE 容易踩坑?
CPU 和 DMA 可能看到不同的缓存副本,需要 clean/invalidate。
DMA2D 适合做什么?
图形数据搬运、颜色格式转换、图像混合。