根因在于DMA与中断的竞争时序:输入捕获事件触发中断时,若DMA也在同一周期搬运CCR寄存器数据,两者可能读取到不同时刻的捕获值(例如中断读取旧值,DMA搬运新值),导致数据错位。规避方法:1)优先使用DMA传输,中断仅用于错误或溢出处理,避免在捕获中断中读取数据;2)若必须同时使用,确保DMA传输完成中断优先级高于捕获中断,并在DMA回调中同步数据;3)采用双缓冲或环形缓冲区,通过DMA的循环模式配合半传输/传输完成中断,保证数据连续性;4)检查定时器时钟与DMA时钟域,必要时插入内存屏障(__DMB())或使用volatile修饰共享变量。实操建议:先用逻辑分析仪验证捕获时序,再调整DMA突发长度和FIFO阈值,减少竞争窗口。
mcuku 阿沐 · 2026-08-27