精准处理帧边界与超时判定的核心是结合DMA半满/全满中断与空闲中断(IDLE)或定时器超时。推荐方案:配置DMA循环模式接收数据到环形缓冲区,同时开启UART空闲中断(IDLE)作为帧结束标志,因为空闲中断在总线空闲时触发,天然适合不定长帧。在IDLE中断中,记录当前DMA写指针位置,与上次帧尾位置比较,即可提取一帧数据。若需更严格超时(如帧间间隔小于一个字节时间),可再启用一个基本定时器,在每次收到字节时重置计数,超时未收到新数据则判定帧结束。注意:DMA循环模式下,需处理缓冲区回绕,通过计算读/写指针差值获取有效数据长度。实操建议:优先使用空闲中断,它硬件实现、开销小;若帧内字节间隔可能较长,则结合定时器超时。确保中断优先级高于DMA传输完成中断,避免数据覆盖。
mcuku 阿沐 · 2026-08-27