ADC模块的简单应用

利用ADC测量电压

1、具体操作

(1)初始化硬件

  • 按如下操作配置ADC外设:
    img
    img
  • 配置时钟
    img
  • 配置串口,用于输出ADC数据
    img
  • 配置时钟
    img
  • 在主循环外部启用ADC模块
  /* USER CODE BEGIN 2 */
  HAL_ADC_Start(&hadc1);
  HAL_ADC_PollForConversion(&hadc1, 100);
  /* USER CODE END 2 */
  • 引用输入输出头文件
/* USER CODE BEGIN Includes */
#include <stdio.h>
/* USER CODE END Includes */
  • 重定向至使能的串口输出
/* USER CODE BEGIN 4 */
int fputc(int ch, FILE *stream){
		HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 10);
	return ch;
}
/* USER CODE END 4 */

(2)操控硬件

  • 声明采样值adcValue,电压值Voltage
/* USER CODE BEGIN 0 */
int adcValue;//ADC模块的采样值
float Voltage;//计算后的电压值
/* USER CODE END 0 */
  • 在主循环内写入以下内容:
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		HAL_Delay(10);
		HAL_ADC_Start(&hadc1);//再次启用ADC,不启动就会一直保持第一次采样的值
		adcValue = HAL_ADC_GetValue(&hadc1);//获取采样值
		Voltage = (float)(adcValue / 4096.0f * 3.3f);//计算电压
		printf("The voltage is %.2f\r\n", Voltage);//输出电压值
		printf("The ADC value is %d\r\n", adcValue);//输出采样值
		HAL_Delay(999);//延时1秒
  }

计算电压的方式:
img
最大采样值计算方式:
img
最大采样值计算方式:
img

  • 该开发板的参考电压为3.3V,分辨率为12,因此计算电压的公式为:
Voltage = (float)(adcValue / 4096.0f * 3.3f);

2、实验效果

  • 每隔一秒,单片机会向串口分别输出一次采样值和计算后的真实电压值

(1)采样端接地后输出:

img
img

(2)采样端接干电池后输出

万用表测量结果(干电池快没电了)

img

ADC模块测量结果

img
img

3、代码清单

/*------------重定向函数-------------*/
int fputc(int ch, FILE *stream){
		HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 10);
	return ch;
}
/*-----------启用ADC模块的函数-----------------------
*hadc:指定ADC模块的句柄
*/
HAL_StatusTypeDef HAL_ADC_Start(ADC_HandleTypeDef *hadc);
/*-----------------读取ADC值的函数--------------------
*hadc:指定ADC模块的句柄
*/
uint32_t HAL_ADC_GetValue(ADC_HandleTypeDef *hadc);
posted @ 2025-09-02 14:20  奶龙大王  阅读(18)  评论(0)    收藏  举报