在STM32上使用DMA接收不定长串口数据且不依赖空闲中断时,推荐采用‘定时器超时判断法’:配置一个基本定时器(如TIM6/7),在每次DMA接收中断(或串口RXNE中断)中重置计数器,并启动定时器;当定时器溢出(即无新数据到达超过设定时间,如3-5个字符周期)时,认为帧结束,此时从DMA缓冲区读取数据。实操建议:设定超时时间需大于最大字符间隔,通常为波特率下3-5字节传输时间;使用DMA循环模式配合双缓冲,避免数据覆盖;在定时器中断中关闭DMA传输并处理数据,处理完后再重新开启。此方法不依赖硬件空闲检测,适用于所有STM32系列,且对低功耗场景更友好。
mcuku 阿沐 · 2026-09-06