zoukankan      html  css  js  c++  java
  • stm32CubeMx 实现单通道ADC DMA采集

     今天要做的是ADC单通道DMA采集实验

    MCU : STM32F429

    开发工具:STM32CubeMx 版本号 5.0.0

    实验目的:实现ADC1 13通道 DMA采集

    一 :简介

      首先,我们来看一下STM32F4XX参考手册里关于该芯片的ADC功能介绍

      

    二:STM32CubeMx 配置

    配置RCC 

     

     配置时钟,硬件使用了25MHz无源晶振

    配置ADC

    数据对齐方式 为 右对齐

    使能 连续转换模式,DMA连续请求

    设置采样次数 为 3个周期

     

    配置 DMA

    Mode设置为Circular模式,数据宽度设置为Half Word  2个字节

     配置Project Manager

    设置好之后,点击GENERATE CODE 生成代码

    定义变量

    __IO uint16_t ADC_ConvertedValue[20];
    __IO float ADC_Volt;

    启动DMA数据传输 

    HAL_ADC_Start_DMA(&hadc1, (uint32_t*)&ADC_ConvertedValue[0], 20);

    读取ADC数据

    unsigned int i = 0, ADC_Value = 0;
    for(i = 0; i < 20; ++i)
    {
      ADC_Value += ADC_ConvertedValue[i];
    }
    ADC_Value = ADC_Value / 20;
    printf("ADC Value %d ",ADC_Value);
    printf("vol %f ", ADC_Value * 3.3 / 4096);

     三 :实验结果

     串口输出结果

    四: 实验中遇到的问题

      1 

     

    最后一个参数一开始的时候写1,程序就出现了阻塞的现象。我分析可能是因为DMA选择的是Circular模式,会一直产生中断,从而使得CPU都被中断抢占了,因此将数据传输长度改为了20,每次对20个数据进行求均值计算,然后测试没有问题。

      2  关于采样周期

         采样周期 是否是越大越精准呢?  我把采样周期改大了之后,再进行测试,实验有待验证

        

  • 相关阅读:
    转载一篇文章 python程序员经常犯的10个错误
    外部表与partition
    grpc 入门(二)-- 服务接口类型
    用例图简介(转)
    UML类图(Class Diagram)中类与类之间的关系及表示方式(转)
    快速搭建fabric-v1.1.0的chaincode开发环境
    ubuntu networking 与 network-manager
    [转]bashrc与profile区别
    超矩链--基于矩阵的分布式账本
    adb 在windows7中的使用
  • 原文地址:https://www.cnblogs.com/birdBull/p/10792423.html
Copyright © 2011-2022 走看看