本文开发环境:
- MCU型号:STM32F103C8T6
- IDE环境: MDK 5.27
- 代码生成工具:STM32CubeMx 5.4.0
- HAL库版本:STM32Cube_FW_F1_V1.8.0
本文内容:
文章目录
一、 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():获取得到的数值
本文开发环境:
- MCU型号:STM32F103C8T6
- IDE环境: MDK 5.27
- 代码生成工具:STM32CubeMx 5.4.0
- HAL库版本:STM32Cube_FW_F1_V1.8.0
本文内容:
文章目录
一、 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():获取得到的数值
举报