zoukankan      html  css  js  c++  java
  • 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数值太大,所以无法正常解析出数据。

  • 相关阅读:
    python拆包与装包-*args,**kwargs
    mybatis学习4-CRUD操作
    mybatis学习3-入门案例,注解方式
    mybatis学习1-前置,复习Jdbc
    spring框架学习-aop
    spring学习1-第一个spring项目
    spring概述
    idea的一些个人设置
    maven的一些个人设置
    VBA文件对话框的应用(VBA打开文件、VBA选择文件、VBA选择文件夹,VBA遍历文件夹)
  • 原文地址:https://www.cnblogs.com/jiayezi/p/14857406.html
Copyright © 2011-2022 走看看