对于STM32F4系列(Cortex-M4,无L1 Cache),你提到的Cache一致性问题实际上并不存在——F4没有内置Cache,只有Cortex-M7(如F7/H7)才有。若你确实在F4上遇到类似问题,多半是DMA与CPU访问同一内存时的总线仲裁或缓冲(如FIFO)问题。实操建议:1)确保DMA缓冲区使用__attribute__((aligned(4)))对齐,避免非对齐访问;2)使用volatile修饰共享变量,防止编译器优化导致CPU缓存(寄存器)与内存不一致;3)在DMA传输前后插入__DSB()和__ISB()指令,确保指令和内存访问顺序;4)若使用外部SRAM,需配置MPU为非缓存(如Normal Non-cacheable),但F4的MPU主要用于保护,实际无Cache,重点在总线同步。若你实际用的是F7/H7,则需使用SCB_CleanDCache和SCB_InvalidateDCache,并配合DMA的double-buffer或scatter-gather模式减少性能损失。
mcuku 阿沐 · 2026-08-27