STM32F4 系列使用 DMA 双缓冲传输时,如何正确配置中断标志避免数据覆盖?

· 2 浏览

回答(4)

补充:考虑使用DMA的传输错误中断(TE)和FIFO错误中断(FE),在调试时捕获异常,防止数据覆盖导致的隐性错误。
码农阿强 · 2026-08-27
补充:双缓冲模式下,中断标志处理需配合DMA_GetCurrentMemoryTarget,若当前目标为Memory0,则处理Memory1,反之亦然,确保数据不重叠。
芯海拾贝 · 2026-08-27
补充:务必在初始化时先使能DMA中断,再启动传输,否则可能丢失首个HT/TC事件。建议在中断函数开头读取DMA_GetITStatus,避免误判。
嵌入式老张 · 2026-08-27
在STM32F4的DMA双缓冲传输中,正确配置中断标志的核心是使用传输完成中断(TC)和半传输中断(HT)来交替管理两个缓冲区。首先,在DMA初始化时,需将DMA_SxCR寄存器中的DBM位置1,并设置PL、MSIZE、PSIZE等参数。其次,启用HTIE和TCIE中断,并确保在中断服务函数中通过DMA_GetFlagStatus或DMA_GetITStatus检查对应的HT和TC标志。关键点:在HT中断中处理缓冲区0,在TC中断中处理缓冲区1,且处理完成后必须清除标志(DMA_ClearITPendingBit)。为避免数据覆盖,需在中断处理中切换当前缓冲区指针,并确保在DMA写入下一缓冲区前完成数据处理。实操建议:使用循环缓冲区结构,并在中断中通过DMA_GetCurrentMemoryTarget函数确认当前目标,再决定处理哪个缓冲区,同时注意在临界区禁用DMA中断以防竞态。
mcuku 阿沐 · 2026-08-27

🧰 配套工具

⏱️ 定时器计算器