STM32CUBEMX_ADC电压采样DMA传输

实验1:点亮LED
实验2:按键控制LED
实验3:外部中断检测按键
实验4:扩展芯片检测按键
实验5:定时器实现LED闪烁
实验6:基于PWM的呼吸灯
实验7:检测输入的PWM频率和脉宽
实验8:串口的输入和输出
实验9:串口使用PRINTF函数
实验10:SPI接口操作片外FLASH
实验11:SPI接口操作TF卡
实验12:IIC接口操作OLED屏幕
实验13:ADC电压采样

本实验使用STM32自带的ADC对外部电压进行采集,同时使用DMA将采集到的数据搬运到指定的数组,然后通过串口printf函数打印出来。如图,为板上使用的高精度旋钮式电位器。

通过ADC12_IN0,也就是PA0,送入单片机进行采样。

步骤如下:

1、新建工程,进行基本配置。通过点击“ACCESS TO MCU SELECTOR”来创建一个新的工程:

参照实验1,芯片选择“STM32F103C8”。

打开外部时钟,点击“System Core”,选择RCC,在右侧弹出的菜单栏中选择“Crystal/Ceramic Resonator”。

选择调试接口,点击“System Core”,选择RCC。,在右侧弹出的菜单栏中选择“Serial Wire”。

2、ADC配置。先是是AD采样相关的参数,如图:

然后是DMA相关的配置,如图:

3、串口配置。参照实验9配置即可。

4、时钟配置。参照实验1.

5、生成工程。参照实验1的步骤7,进行相应配置,生成工程文件。

6、串口printf。参照实验9,添加相关函数与头文件。

7、定义数组与变量。用来存储ADC采集的值和最终计算得到的值。

代码:

__IO uint32_t ADC_ConvertedValue[20];
__IO float ADC_Volt;

8、开启ADC。启动ADC的DMA工作方式,并计算采集到的电压值,然后通过串口打印出来。

代码:

  HAL_ADC_Start_DMA(&hadc1,ADC_ConvertedValue,20);
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		
		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);
		HAL_Delay(2000);
  }

修改后,保存,编译、下载,重新上电。使用串口助手连接板子和电脑,可以看到串口助手收到打印信息。

整个过程有PPT、数据手册、原理图、源码、相关软件,在公众号(单片机爱好者)回复关键词:002或者STM32CUBEMX教程,即可获取下载链接。

《STM32CUBEMX_ADC电压采样DMA传输》有2条留言

  1. 为什么大家都开始搞cube了,那玩意生成的代码,编译器来真费劲,不断的封装,不知道什么原因ST不维护以前的库了。

    回复

留下评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据