核心思路:用半传输中断(HT)和传输完成中断(TC)分别处理两个缓冲区的数据,而帧尾超时(IDLE或定时器)只负责触发‘当前缓冲区已满’的解析,不直接处理数据。竞争条件的关键在于:当HT触发时,DMA可能正在写另一个缓冲区,此时若IDLE同时到达,需用标志位或临界区保护。实操建议:1) 在DMA中断(HT/TC)中,仅置位‘缓冲区就绪’标志,不解析;2) 在IDLE中断或定时器超时中,先关DMA中断(或读DMA剩余计数),再根据当前DMA写指针判断哪个缓冲区是完整的,最后解析并清标志。3) 若使用定时器超时,建议用硬件定时器(如TIM)而非SysTick,避免中断嵌套冲突。4) 测试时故意制造HT与IDLE同时发生的场景(如发送长度恰为半个缓冲区),用逻辑分析仪验证标志位时序。
mcuku 阿沐 · 2026-08-27