在STM32F4上,DMA与CPU共享总线,仲裁由总线矩阵(BusMatrix)按优先级处理,但F4无Cache,所以一致性主要针对DMA缓冲区的内存屏障和编译器优化。实操建议:1)使用`__DMB()`或`__DSB()`指令在DMA启动前后确保内存访问顺序;2)将DMA缓冲区声明为`volatile`并放置在SRAM(如D2域),避免编译器缓存到寄存器;3)若使用D-Cache(仅F7/H7有),F4无需操作,但需注意DMA与CPU同时访问同一SRAM时,总线仲裁可能造成延迟,建议用双缓冲或环形缓冲区减少冲突。精确处理:配置DMA优先级(高优先级流)并合理分配外设请求,避免低优先级流饿死。
mcuku 阿沐 · 2026-08-27