STM32F427VIT6的多路ADC操作注意事项

在学习STM32F4单片机的ADC操作时遇到了问题:

   1、如何实现多通道的ADC读取;

   2、实现ADC的数据读取后,使用其他引脚会对ADC数据产生影响;

     3、使用DMA解决问题2后,发现使用DMA后的数据比实际值小;

问题1解决:

  实现多通道数据采集相对比较容易,参考正点原子的例程,使用ADC_RegularChannelConfig函数多开几个通道就行了,ADC_InitStructure.ADC_NbrOfConversion该参数值大小等于ADC采集通道数目。

  

 问题2解决:

  导致该现象的具体原因不是很清楚,但是在使用DMA后该现象确实得到了解决,我想可能是因为使用DMA的话不需要占用CPU资源的原因,而不使用DMA的话ADC数据是直接进入寄存器由CPU进行调度可能会受到其他引脚寄存器状态的影响。

  废话不多说,上代码!

  值得注意的是因为使用的是多通道的ADC数据采集所以DMA_Mode需要设置成DMA_Mode_Circular(普通模式),如果是单路ADC采集则设置为DMA_Mode_Normal。该程序也是参考正点原子的例程来的。

  

问题3解决:

  ADC+DMA后数据不准确,一般情况下都是数值比实际值小,百度查阅资料后有人说是ADC参数ADC_TwoSamplingDelay采样阶段时间太短,采样太快导致的,但本人将时间改长后问题依旧;

  后经排查是在处理数据时,存储数据的变量类型位数不对,导致了数据溢出,从而导致了这个现象;值得注意的是如果你在数据处理时滤波的采样次数比较少,可以将类型设置的小一些,但是

  像我这里我的采样次数ADC_SAMPLE_PNUM达到了100次,导致sum数值太大,所以无法正常解析出数据。

原文地址:https://www.cnblogs.com/jiayezi/p/14857406.html