stm32CubeMx 实现单通道ADC DMA采集

今天要做的是ADC的实验

平台 : STM32F429

开发工具:STM32CubeMx 版本号 5.0.0

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

一 :简介

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

  

二:STM32CubeMx 配置

数据对齐方式 为 右对齐

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

设置采样次数 为 3个周期

 

配置 DMA

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

设置好之后,点击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\r\n",ADC_Value);
printf("vol %f\r\n", ADC_Value * 3.3 / 4096);

 三 :实验结果

 串口输出结果

四: 实验中遇到的问题

  1 

 

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

  2  关于采样周期

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

    

猜你喜欢

转载自www.cnblogs.com/birdBull/p/10792423.html