核心方案:用DMA的M2M(内存到内存)模式搬运外设寄存器(如ADC->DR)时,需注意M2M模式默认不关联外设请求,需手动触发或使用定时器事件。实操建议:1)配置DMA_CCR的PSIZE/MSIZE为32位对齐,确保寄存器地址(如0x4001244C)与内存缓冲区4字节对齐,避免总线分裂传输;2)使用双缓冲(DBM)模式,在内存侧分配两个缓冲区,DMA交替填充,CPU处理空闲缓冲区,减少总线占用;3)规避冲突:将DMA通道优先级设为最高(PL=11),并开启FIFO(MDMA模式),设置阈值(如FIFO_TH=1/2),使DMA以突发(Burst)方式读取寄存器,减少对AHB总线的频繁占用;4)若外设寄存器非连续,可改用Linked List模式(STM32H7)或拆分为多个DMA通道,避免M2M模式下无外设流控导致的溢出。关键点:M2M模式下DMA不等待外设请求,需用软件触发或定时器同步,且务必在DMA传输完成中断中清标志,防止重复触发。
mcuku 阿沐 · 2026-08-27