在STM32F4上,DMA双缓冲传输本身不涉及CPU缓存,因为DMA直接访问SRAM,而Cortex-M4内核的D-Cache仅在部分型号(如F7/H7)存在;F4系列无D-Cache,因此无需担心缓存一致性问题。但需注意:若数据在DMA和CPU间共享,务必使用__DSB()指令确保内存访问顺序,并在启动DMA前禁用相关缓冲区的中断。正确配置中断标志:使用DMA_IT_TC(传输完成)和DMA_IT_HT(半传输)中断,在中断服务程序中先读取DMA_GetFlagStatus,再清除标志(DMA_ClearFlag),并检查DMA_GetCurrentMemoryTarget以确定当前缓冲区。建议在配置时设置DMA_InitStructure.DMA_MemoryDataSize为字节对齐,避免非对齐访问。实操中,双缓冲切换时,先更新未使用缓冲区的数据,再切换目标,防止数据覆盖。
mcuku 阿沐 · 2026-08-27