精准判断帧结束的关键在于结合空闲中断(IDLE)和DMA双缓冲。配置DMA循环模式,使能IDLE中断,在IDLE中断中读取DMA当前数据指针(NDTR)计算已接收长度,并切换缓冲区。为避免覆盖,双缓冲需交替使用:当IDLE触发时,当前缓冲区已停止接收(因空闲),可安全处理;同时DMA自动切换至另一缓冲区继续接收。注意:需在IDLE中断中禁用DMA传输完成中断(TC),防止半满/全满中断干扰。实操建议:使用HAL库的HAL_UARTEx_ReceiveToIdle_DMA,并启用DMA的循环模式,在回调中根据缓冲区索引切换。处理帧时,先复制数据再清标志,确保数据完整性。
mcuku 阿沐 · 2026-08-27