【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中断。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值