一、ADC是指模拟数字转换器(Analog-to-digital converter)是用于将模拟形式的连续信号转换为数字形式的离散信号的一类设备。一个模拟数字转换器可以提供信号用于测量。与之相对的设备成为数字模拟转换器。通常ADC采样用于超声波测距、MCU芯片温度采集等等。本教程将利用STM32F103ZET6板子上自带的MUC温度采集器为例程进行讲解ADC采样。
本教程适用大部分ADC采样。
二、首先进行STM32CubeMX的时钟配置。详情见(24条消息) STM32基于HAL库的开发与应用(1)STM32CubeMx基本配置_stm32cubemx sys配置_老何希望不掉头发的博客-CSDN博客
三、点击ADC1勾选MCU内部温度传感器。然后持续循环模式选择Enable。其他保持不变。
四、当开启ADC采样时候RCC时钟树会出现频率报错,此时需要我们进行调值。
五、打开串口UART1、并生成工程。
六、因为这儿需要我们加入printf()重定向,以及keil设置,否则串口调试助手无法查看数值。
并在main.c文件对应位置输入重定向函数。注意重定向函数中huart1是因为我用的是串口一,根据实际情况而定
/* USER CODE BEGIN Includes */
#include "stdio.h"
int fputc(int ch, FILE *f)
{
HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xffff);//这里huart1是因为我的串口是1,根据情况而改动
return ch;
}
int fgetc(FILE *f)
{
uint8_t ch = 0;
HAL_UART_Receive(&huart1, &ch, 1, 0xffff);
return ch;
}
/* USER CODE END Includes */
七、在串口重定向结束后可以开始编写ADC代码。
主要思路:
1、ADC初始化
2、ADC校准
3、开启ADC
4、等待ADC转换完成
5、读取ADC数值
6、对ADC读取数值进行转换。公式:转换值=读取值/4096*3.3。
以下为代码示例(在对应位置添加即可)
/* USER CODE BEGIN 2 */
HAL_ADCEx_Calibration_Start(&hadc1); //AD校准
/* USER CODE END 2 */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
//温度采集
HAL_ADCEx_Calibration_Start(&hadc1); //校准
HAL_ADC_Start(&hadc1); //开启
HAL_ADC_PollForConversion(&hadc1,50); //等待转换完成
if(HAL_IS_BIT_SET(HAL_ADC_GetState(&hadc1), HAL_ADC_STATE_REG_EOC))
{
ADC_ConvertedValue = HAL_ADC_GetValue(&hadc1);
ADC_ConvertedValueLocal =(float) ADC_ConvertedValue/4096*3.3; // 读取转换的AD值
printf("The current AD value = 0x%04X \r\n", ADC_ConvertedValue);
printf("The current AD value = %f V \r\n\r\n",ADC_ConvertedValueLocal); //实际电压值
printf("MCU温度 =%f\r\n",(1.43-3.3/4095*ADC_ConvertedValue)/0.0043+20);
}
//循环延时
HAL_Delay(1000);
}
八、以上完成后烧写到单片机上打开串口调试助手即可查看数值。