核心思路:利用DMA的传输完成中断(TC)和半传输中断(HT)来同步切换缓冲区,并在中断服务程序(ISR)中立即处理数据,避免在切换瞬间产生数据丢失。具体做法:1)配置DMA为循环模式,开启HT和TC中断;2)在HT中断中处理第一个缓冲区(Buffer1),在TC中断中处理第二个缓冲区(Buffer2),处理时先读取DMA当前剩余计数(DMA_GetCurrDataCounter)以确定有效数据长度,再拷贝数据到应用层;3)切换缓冲区时,确保在中断内完成指针切换,且处理速度要快于DMA写入速度,否则可考虑使用双缓冲加乒乓机制,即一个缓冲区被DMA写入,另一个被CPU处理,交替进行;4)若数据量较大,可在ISR中仅做数据搬移,将解析工作放到主循环或任务中,避免阻塞中断。此外,需注意DMA配置时设置数据宽度为字节,并确保缓冲区地址对齐。
mcuku 阿沐 · 2026-08-27