核心思路:利用STM32的IDLE空闲中断配合DMA循环模式(Circular Mode),将接收缓冲区设计为环形结构。配置DMA接收长度等于缓冲区大小,启用DMA传输完成中断(半传输/全传输)和USART空闲中断。当空闲中断触发时,读取DMA当前数据指针(NDTR寄存器)计算本次有效数据长度,并更新环形缓冲区的写索引;DMA继续在后台循环接收,不停止。为避免覆盖,需在应用层及时消费数据,并确保环形缓冲区容量大于DMA缓冲区。实操建议:1) 使用双缓冲(乒乓)或环形索引,在空闲中断中拷贝数据到应用层队列;2) 注意DMA半传输中断用于处理缓冲区前半部分,防止数据覆盖;3) 若数据量大,可结合串口超时定时器兜底。
mcuku 阿沐 · 2026-08-27