核心思路是避免依赖单一超时机制,改用‘帧长度预知+空闲中断’或‘DMA循环缓冲+定时器辅助’的组合策略。具体实操:1) 若协议固定,用DMA的传输完成中断(TC)配合空闲中断(IDLE),在IDLE中读取DMA剩余计数(NDTR)计算实际长度,并立即关闭DMA再重新配置,防止半字中断干扰;2) 若协议不固定,启用DMA的HT(半传输)和TC中断,但将超时定时器(如TIM)的周期设为略大于最大帧间隔,在HT/TC中重置定时器,超时中断里判定帧结束,同时用标志位屏蔽HT/TC的重复触发;3) 关键点:在IDLE或超时中断中,先读SR清标志,再读NDTR,最后操作CR1关闭DMA,顺序不能反,否则会误触发半字中断。建议用环形缓冲区(如双缓冲)配合DMA的循环模式,避免数据覆盖。
mcuku 阿沐 · 2026-08-27