STM32Cube系列ADC(模数转换)

本例通过两个例程介绍STM32的模数转换器(ADC),第一个通过ADC采集内部温度传感器通道电压,然后得出MCU内部温度。第二个通过ADC读取电位器调压模组输出的电压。

1.温度读取

开启时钟,配置时钟频率为72MHz

开启串口1,不开启串口中断 

ADC1外设选择温度传感器通道。

ADC1配置如下,选择默认设置。Date Alignment设置为数据右对齐。

生成报告以及代码,编译程序。在adc.c文件中可以看到ADC初始化函数。

在stm32f1xx_hal_adc.h头文件中可以找到如下ADC操作函数。和串口一样,ADC也可以通过三种方式控制。

在main函数前面声明变量保存AD采集的值。

在main函数while循环里面添加函数声明变量保存AD采集的值。

		HAL_ADC_Start(&hadc1);//开启ADC1
		HAL_ADC_PollForConversion(&hadc1, 50);//表示等待转换完成
		if(HAL_IS_BIT_SET(HAL_ADC_GetState(&hadc1), HAL_ADC_STATE_REG_EOC))//就是判断转换完成标志位是否设置
		{
			AD_Value = HAL_ADC_GetValue(&hadc1);//读取ADC转换数据
			printf("MCU Temperature:%.1f¡æ\r\n",((AD_Value*3.3/4096-0.76)/2.5+25));
		}
		HAL_Delay(1000);

AD_Value*3.3/4096为将转换后的数据转化为电压,单位为V,参考电压为3.3V。查询数据手册可以电压和温度的关系。经过计算公式装换后等到MCU内部温度值。

编译程序下载到开发板上。打开串口助手,设置波特率为115200,串口助手上显示温度

2.读取单个引脚上的电压

在前面温度读取的基础上开启ADC1里的IN0(PA0)

在主程序中添加下列程序

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

    /* USER CODE BEGIN 3 */
		HAL_ADC_Start(&hadc1);
		HAL_ADC_PollForConversion(&hadc1, 50);
		if(HAL_IS_BIT_SET(HAL_ADC_GetState(&hadc1), HAL_ADC_STATE_REG_EOC))
		{
			AD_Value = HAL_ADC_GetValue(&hadc1);
			printf("ADC1_IN0 AD_value: %.2fV\r\n",((AD_Value*3.3/4096)));
		}
        HAL_Delay(1000);
  }
  /* USER CODE END 3 */

编译无误后下载到开发板,调节电位器时,获取的AD转换值和电压值将变化,并通过串口打印出来.

  • 1
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值