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

  • 相关阅读:
    基于JFinal中搭建wopi协议支撑办法
    mysql 增加列
    国王分金币
    口算题卡升级版本
    elasticsearch牛人的日志列表
    牛B的大数据库
    golang --rune
    golang ---rune与byte
    golang学习笔记--接口
    golang学习笔记--函数和方法
  • 原文地址:https://www.cnblogs.com/jiayezi/p/14857406.html
Copyright © 2011-2022 走看看