【STM32笔记】STM32的ADC开发基础(三)—中断模式

一. ADC中断配置(中断模式)

  打开STM32CubeMX,选择STM32103C8芯片,设置基本配置。注意设置时钟配置ADC时钟不要超过14MHz。
  这里只打开ADC1的IN1通道,设置为禁止间断模式,禁止扫描模式,禁止连续转换模式。使能ADC1全局中断。

二. HAL库中ADC中断模式的重要函数

开启ADC中断函数:HAL_StatusTypeDef HAL_ADC_Start_IT(ADC_HandleTypeDef* hadc);

/**
  * @简介  使能ADC,通过中断开启常规组的转换。
  * @参数   hadc: ADC实例指针
  * @返回值  HAL status
  */
  
HAL_StatusTypeDef HAL_ADC_Start_IT(ADC_HandleTypeDef* hadc);

关闭ADC中断函数:HAL_StatusTypeDef HAL_ADC_Stop_IT(ADC_HandleTypeDef* hadc);

/**
  * @简介  停止常规组(和注入组)的ADC转换,禁用中断,转换结束,禁用ADC外设。
  * @参数  hadc: ADC实例指针
  * @返回值空
  */
  
HAL_StatusTypeDef HAL_ADC_Stop_IT(ADC_HandleTypeDef* hadc);

ADC转换完成中断回调函数:__weak void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc);

/**
  * @简介    非阻塞模式下的ADC转换完成回调函数
  * @参数    hadc: ADC实例指针
  * @返回值  空
  */

__weak void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc);

以上函数在stm32f1xx_hal_adc.c文件中:

三. 实现ADC中断转换

在main.c文件的main函数中的while下写入以下代码:

 /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
	  HAL_ADC_Start_IT(&hadc1);
	  HAL_Delay(500);
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */

在main.c文件中的Private variables下的USER CODE BEGIN PV注释对中写入以下代码:

/* Private variables ---------------------------------------------------------*/

/* USER CODE BEGIN PV */
unsigned int adc_value = 0;
/* USER CODE END PV */

在main.c文件中的Private function prototypes下的USER CODE BEGIN PFP注释对中写入以下代码:

/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
/* USER CODE BEGIN PFP */
// ADC转换完成中断回调函数
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc){
	if(hadc == &hadc1){
		adc_value = HAL_ADC_GetValue(&hadc1);
	}
}
/* USER CODE END PFP */

编译下载到开发板上,通过下载器保持开发板与Keil5的连接,开启Keil5的调试会话

选定adc_value,鼠标右击,选择Add ‘adc_value’ 展示子菜单,选择Watch1就可以在界面右下角看到Watch1的adc_value查看其值的变化。


多次点击上图的Step Over选项,发现adc_value中的值发生了变化为0x00000FC3(h) = 4035(十进制),根据计算公式4035*3.3/4096 = 3.25V,此时我的PA1引脚口所接的就是3.3V(有亿点点的误差~~~~),但是还是实现了ADC中断。

作者:Macy~

物联沃分享整理
物联沃-IOTWORD物联网 » 【STM32笔记】STM32的ADC开发基础(三)—中断模式

发表回复