STM32F407的ADC可谓是非常强大,有3个ADC每个ADC最大的采样率达到了0.41us(既2.4M),如果3个ADC在规则组模式下同时采样最快可以达到7.2M的采样率。
在讲解ADC采样之前ADC的时钟ADCCLK是一个非常关键的因素。ADCCLK的时钟来自于APB2(AHB一般为系统时钟的1分频168M,APB1为系统时钟的4分频42M,APB2为系统时钟的2分频84M),最终ADCCLK的时钟是通过Fpclk2通过2、4、6、8分频而来,在这里提一下stm32的时钟,其实理解一块stm32芯片理解其不同的时钟线是非常关键的事情,可能有些人看到Fpclk2可能就蒙了,其实Fpclk2就是APB2的意思这里自己可以在编程文档中找到。
在stm32F4-discovery开发板中adc的例程中系统的时钟总线为SYSCLK为144M,经过2分频到APB2为72M,ADCCLK如果采用最小的2分频为36M。
ADC的采样时间是按照:Tconv = Sampling time + 12 cycles,当采样时间为3cycles时,总的转换时间为15个ADCCLK,ADCCLK在36M下即为2.4M。可以这么说对于ADC的采样时间非常的重要。
stm32F4的ADC涉及到一个规则组和注入组的概念这里就不提了,自己可以通过查看文档来解决,其实就是转换的方式不同而已。
既然ad采样好了,那么对连续或交替的ad采样中数据的搬移是一个关键,这里stm32F4提供了3种高效的DMA搬运方法:
DMA模式1:单次触发模式,当ADC转换完成就进行ADC转换数据的搬移。
DMA模式2:2次转换触发,当有ADC1和ADC2同时交替工作时,每完成1次交替转换,就将ADC1的数据放在低半字,将ADC2的数据放在高半字。
当有ADC1和ADC2及ADC3同时交替工作时,每完成一次交替转换,就将就将ADC1的数据放在低半字,将ADC2的数据放在高半字,在下一次交替工作的时候将ADC3的数据放在低半字,将新一次的ADC1数据放在高半字。
DMA模式3:该模式类似于模式2,但是只能用于交替模式且转换位数为6或8位,每转换2个ADC将数据以半字存放。