在STM32上使用DMA+双缓冲接收不定长串口数据,核心难点是帧边界识别和超时判定。建议采用“空闲中断+DMA”方案:启用USART的IDLE中断,当总线空闲时触发中断,此时读取DMA剩余数据量(如DMA_GetCurrDataCounter)即可确定当前帧长度,并切换缓冲区。超时判定可结合定时器:在IDLE中断中启动一个短定时器(如10ms),若超时未收到新数据则确认帧结束;若收到新数据则重置定时器。注意双缓冲需配置为循环模式,并在切换时确保数据完整性(如关闭DMA再切换)。实操中,建议将帧头校验(如0xAA 0x55)加入协议,以增强边界识别鲁棒性。
mcuku 阿沐 · 2026-08-27