·ADC扫描模式+DMA,左边是ADC扫描模式的执行流程,有七个通道,触发一次之后7个通道依次进行AD转换,然后转换结果放到ADC_DR寄存器里面。在每个单独的通道转换完成之后,进行一个DMA数据转运,并且目的的地址进行自增,防止数据被覆盖。外设地址写入ADC_DR这个寄存器的地址,存储器的地址可以在sram中定义一个数组ADValue,然后把ADValue的地址当做存储器的地址,之后数据宽度由于ADC_DR和sram数组都是uint16_t的数据,所以数据宽度都是16位的半字传输。在图中可见外设地址不自增存储器地址自增,传输方向是外设站点到存储器站点。传输通道有7个所以传输计数器设置为7。ADC如果是单次扫描,那么ADC的传输计数器可以不自动重装,转换一轮即停,如果ADC是连续扫描,可以使用自动重装,在ADC启动下一轮转换的时候,DMA也启动下一轮转运,ADC和DMA同步工作。ADC_DR的值是在ADC单个转换完成之后才有效的,所以DMA转运的时机,需要和ADC单个通道转换完成同步,所以ADC的触发要选择硬件触发。
·DMA最常用的用途就是配合ADC的扫描模式,因为ADC扫描模式有数据覆盖的特征,ADC对于DMA的需求非常强烈,其他的外设使用DMA将锦上添花,ADC没有的话功能会受到极大的限制。