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

  • 相关阅读:
    01pxc集群的部署
    Python简单爬虫获取岗位招聘人数
    nginx跨域问题记录
    自动备份远程mongodb数据库并拉取到本地
    ftp和mysql数据库结合使用
    flask蓝图的简单使用
    apache无法启动报错No space left on device
    简单的接口测试类和测试生成报告工具HTMLTestRunner.py
    简单python接口测试编写和django开发环境的搭建
    Fiddler模拟自动响应数据
  • 原文地址:https://www.cnblogs.com/jiayezi/p/14857406.html
Copyright © 2011-2022 走看看