欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【STM32】【STM32CubeMX】STM32CubeMX的使用之九:ADC

程序员文章站 2024-02-25 14:55:45
...


  下载工程文件:
  https://gitee.com/Joseph_Cooper/stm32-cube-mx-stm32-l151-c8-t6
  MCU:STM32L151C8T6-A
  IDE:MDK-Keil5
  固件库:STM32Cube FW_L1 V1.10.2


0、前言

  本篇博文不再对ADC基本结构做赘述有想了解的戳这里。这里将侧重于CubeMX上的ADC配置过程及使用注意事项。


1、CubeMX配置

【STM32】【STM32CubeMX】STM32CubeMX的使用之九:ADC

▲CubeMX RCC配置

【STM32】【STM32CubeMX】STM32CubeMX的使用之九:ADC

▲CubeMX SYS配置

【STM32】【STM32CubeMX】STM32CubeMX的使用之九:ADC

▲CubeMX 时钟树配置

【STM32】【STM32CubeMX】STM32CubeMX的使用之九:ADC

▲CubeMX ADC配置

  值得注意的是STM32L151的ADC频率在VREF += VDDA时频率不能超过16MHz
【STM32】【STM32CubeMX】STM32CubeMX的使用之九:ADC

▲STM32L151DataSheet Table 53. ADC clock frequency

2、软件设计

  关于串口配置在这里不做赘述有需求的同学戳这里。实验实现读取ADCIN21引脚即PB15引脚和GND之间的电压值。

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

    /* USER CODE BEGIN 3 */
		HAL_ADC_Start(&hadc);	                //启动ADC单次转换
		HAL_ADC_PollForConversion(&hadc, 50);	//等待ADC转换完成,50ms超时时间
		BATVal = HAL_ADC_GetValue(&hadc); //读取ADC转换数据
		printf("BATVal = %.4fV\n", BATVal/4096*3.3*2);//因采用分压电阻和参考电阻阻值为1:1所以计算值乘以2
		HAL_Delay(500);
  }
  /* USER CODE END 3 */

函数及宏定义介绍:
HAL_StatusTypeDef HAL_ADC_PollForConversion
说明: ADC数据定期转换完成。
参数:
  hadc: 指向包含指定ADC配置信息的ADC_HandleTypeDef结构的指针。
  Timeout: 超时值为毫秒。
返回值:HAL status
注意事项:
   此函数清除ADC转换标志EOS(序列结束)和EOC(转换结束。
   此函数不能用于特定的设置:ADC配置为DMA模式,并轮询每个转换结束(ADC init参数“EOCS选择”设置为ADC_EOC_SINGLE_CONV)。 在这种情况下,DMA重置标志EOC,并且不能对每个转换执行轮询。 然而,轮询仍然可以在完整的序列上执行。