单片机学习小组
直播中

1123127317

8年用户 1033经验值
擅长:制造/封装 接口/总线/驱动
私信 关注

如何使用STM32CubeMx配置ADC?

如何使用STM32CubeMx配置ADC?

回帖(1)

郝汉

2022-2-9 16:06:00
  本文开发环境:
  

  • MCU型号:STM32F103C8T6
  • IDE环境: MDK 5.27
  • 代码生成工具:STM32CubeMx 5.4.0
  • HAL库版本:STM32Cube_FW_F1_V1.8.0

  本文内容:
  

  • STM32CubeMx 配置 ADC
  • 示例工程


文章目录





一、 ADC 简介

ADC(analogue-to-digital conversion)指的是将模拟量转换为数字量的过程,在 MCU 中有广泛的应用,通常用以测量电压的值,比如,测量热敏或光敏的电阻两端的电压,就可以获取当前温度或光线的强度。
二、使用 STM32CubeMx 配置 ADC

使用 STM32CubeMx(以下简称 Mx) 可以非常方便的配置外设,一般有以下几个步骤:



  • 选择目标单片机
  • 选择系统时钟源,配置系统时钟树
  • 打开调试 IO 口
  • 配置外设
  • 生成指定 IDE 的工程

由于除配置外设以外为通用配置,不再赘述。
三、ADC 的配置



四、程序设计
int main(void)
{
  /* USER CODE BEGIN 1 */


  /* USER CODE END 1 */
  


  /* MCU Configuration--------------------------------------------------------*/


  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();


  /* USER CODE BEGIN Init */


  /* USER CODE END Init */


  /* Configure the system clock */
  SystemClock_Config();


  /* USER CODE BEGIN SysInit */


  /* USER CODE END SysInit */


  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_ADC1_Init();
  /* USER CODE BEGIN 2 */


  /* USER CODE END 2 */


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


    /* USER CODE BEGIN 3 */
     // 启动ADC转换
        HAL_ADC_Start(&hadc1);
        // 等待转换完成,第二个参数表示超时时间,单位ms
        HAL_ADC_PollForConversion(&hadc1, 100);
        // 为换取ADC状态
        int adc_value = HAL_ADC_GetValue(&hadc1);
        // 采取的右对齐除以2的12次方,参考电压为3.3V
        float  voltage = (float)adc_value / 4096 * 3.3;
        printf("voltage = %frn", voltage);
        HAL_Delay(1000);
  }
  /* USER CODE END 3 */
}
HAL_ADC_Start() :开启一次ADC转换
HAL_ADC_PollForConversion():等待转换完成
HAL_ADC_GetValue():获取得到的数值



举报

更多回帖

发帖
×
20
完善资料,
赚取积分