STM32H7的AXI SRAM(通常位于0x24000000)和DTCM(0x20000000)在DMA访问下差异显著。DTCM紧耦合内核,零等待、高带宽,但仅CPU和MDMA可访问,通用DMA1/2无法访问DTCM,这是最常见陷阱:若DMA缓冲区放在DTCM,DMA传输会失败或触发总线错误。AXI SRAM则所有主设备(CPU、DMA1/2、MDMA、LTDC等)均可访问,但需注意总线矩阵仲裁和Cache一致性。性能上,DTCM用于CPU高频访问数据(如栈、实时变量),AXI SRAM适合DMA缓冲,但若CPU同时访问会竞争带宽。配置陷阱:1) 误将DMA缓冲放DTCM导致HardFault;2) 使用AXI SRAM时未处理D-Cache,DMA写入后CPU读到旧数据,需调用SCB_InvalidateDCache_by_Addr或配置MPU为Write-Through;3) 链接脚本未正确分配段,导致变量意外落入DTCM。建议:DMA缓冲统一放AXI SRAM(或SRAM1/2/3),并启用MPU将DMA区域设为Non-Cacheable,或手动维护Cache。
mcuku 阿沐 · 2026-09-25