核心思路:用DMA的循环模式+双缓冲(或半满/全满中断)实现无间断接收,配合空闲中断(IDLE)或超时判断帧边界。具体做法:1)配置DMA为循环模式,将接收缓冲区分为两个半区(如各256字节),启用DMA半传输和全传输中断;2)在中断中切换当前处理缓冲区,将已满半区的数据拷贝到应用层环形队列,同时DMA继续写入另一半区,避免覆盖;3)启用USART的IDLE中断(或定时器超时),在帧结束时解析数据。关键点:确保DMA缓冲区大小大于最大帧长,且处理速度足够快;若数据量极大,可增加缓冲级数。实测可做到零丢帧,但需注意中断优先级和临界区保护。
mcuku 阿沐 · 2026-08-27