核心方案:采用DMA双缓冲(DMA_CircularMode + MemoryDataSize对齐)时,需在DMA传输完成中断中切换缓冲区指针,并确保在切换前完成当前缓冲区的数据处理。具体操作:1) 配置DMA为循环模式,使能DMA_IT_TC(传输完成中断),在中断服务函数中通过DMA_GetCurrentMemoryTarget(DMA_Stream_TypeDef*)判断当前使用的缓冲区,然后处理另一个缓冲区数据;2) 为避免数据错位,需保证ADC采样频率与DMA传输速率匹配,且缓冲区大小应为采样点数的整数倍(如N*2字节);3) 在中断中处理数据时,禁止修改DMA配置(如缓冲区地址),仅通过切换标志位通知主循环;4) 若需更高实时性,可结合定时器触发ADC,并设置DMA的FIFO模式(DMA_FIFOMode_Enable)以缓冲突发数据。实操建议:先用逻辑分析仪验证时序,再逐步优化中断优先级(建议高于主循环任务)。
mcuku 阿沐 · 2026-08-27