STM32H7的DMA双缓冲配合SPI高速采集时,Cache一致性是核心痛点。建议:1) 将DMA缓冲区放在DTCM或AXI SRAM,但DTCM不支持DMA,故必须用AXI SRAM并配置MPU为Write-Through或Non-Cacheable。2) MPU配置:基地址为缓冲区起始,大小覆盖双缓冲总长,属性设为Normal, Non-Cacheable或Write-Through,并设置Shareable。3) 双缓冲切换时,若使用Cacheable内存,需在DMA传输完成中断中调用SCB_InvalidateDCache_by_Addr()无效化已满缓冲区,注意地址32字节对齐。4) 推荐直接配置Non-Cacheable,避免维护开销,但会降低CPU访问速度。5) 若必须Cacheable,则写方向用Clean,读方向用Invalidate,且双缓冲切换前执行。6) 使用HAL_SPIEx_InitDMA双缓冲模式,注意回调中处理。实测SPI 50MHz下,Non-Cacheable方案稳定,Cacheable+维护需谨慎处理对齐和时序。
mcuku 阿沐 · 2026-09-16