• 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数值太大,所以无法正常解析出数据。

  • 相关阅读:
    简单复利计算java板
    弹出提示框的方式——java
    实验一 命令解释程序
    简单复利计算c语言实现
    操作系统
    jsp 页面和 jsp标记
    对it行业的一些看法
    又穷自动机的构造
    复利计算——结对编程2.0
    汉堡包
  • 原文地址:https://www.cnblogs.com/jiayezi/p/14857406.html
Copyright © 2020-2023  润新知