STM32使用HAL库配置中断的详细指南

一. 中断配置的流程:

1. 使能GPIO函数:__HAL_RCC_GPIOX_CLK_ENABLE()。

2. 配置 GPIO AFIO EXTI 等设置函数:HAL_GPIO_Init()。

配置中断口,配置中断触发的方式等。

3. 配置中断优先级分组,在HAL_Init 里面配置。

4. 配置中断的抢占优先级和响应优先级函数:HAL_NVIC_SetPriority()

参数一:中断号,IRQn_Type的类型。

参数二:抢占优先级。

参数三:响应优先级。

5. 使能中断函数:HAL_NVIC_EnableIRQ()。

参数:中断号,IRQn_Type的类型。

6. 配置中断服务函数:EXTI0_IRQHandler()。

函数:HAL_GPIO_EXTI_IRQHandler()是外部中断共用的入口函数,函数内部会清除中断标志位,并调用callback回调函数。

7. 中断回调处理函数:HAL_GPIO_EXTI_Callback()

通过中断入口函数的GPIO_PIN判断来自哪个IO口的中断,然后执行中断回调函数,就在该函数里来实现中断后你想要实现的功能。

二.  中断实验。

1. 实验内容

主程序执行LED的闪烁,利用中断来使按键来控制LED的亮灭。

2.流程图

大概画了一下,能力有限。

3.代码。

main.c

#include "sys.h"
#include "delay.h"
#include "exti.h"
#include "led.h"
int main(void)
{
    HAL_Init();                         /* 初始化HAL库 */
    stm32_clock_init(RCC_PLL_MUL9); /* 设置时钟, 72Mhz */
	led_init();						//LED初始化
	exti_init();					//中断初始化
   
	while(1)
	{
		led2_on();
		delay_ms(500);
		led2_off();
		delay_ms(500);
	}
}

exit.c

#include "exti.h"
#include "sys.h"
#include "delay.h"
#include "led.h"
void exti_init(void)
{
	__HAL_RCC_GPIOA_CLK_ENABLE();						//GPIO使能
	
	GPIO_InitTypeDef gpio_initstruct;
	gpio_initstruct.Pin = GPIO_PIN_0;					//配置pa0口为中断口
	gpio_initstruct.Mode = GPIO_MODE_IT_FALLING;		//下降沿触发中断
	gpio_initstruct.Pull = GPIO_PULLUP;					//默认拉高	
	HAL_GPIO_Init(GPIOA,&gpio_initstruct);	
	
	HAL_NVIC_SetPriority(EXTI0_IRQn,2,0);				//设置中断优先级
	
	HAL_NVIC_EnableIRQ(EXTI0_IRQn);						//使能中断
}

void EXTI0_IRQHandler(void)								/*中断服务函数*/
{
	HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0);				/*中断入口函数,
													    该函数内部会调用Callback回调函数*/
}

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)			//回调函数
{
	delay_ms(20);										//防止按键抖动
	if(GPIO_Pin == GPIO_PIN_0)							//判断中断源
	{
		if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0) == GPIO_PIN_RESET)
		{
			led1_toggle();								//翻转LED
		}
	}
}

4. 实验效果

32

                                                                本人小菜鸡一枚,如哪里不对请帮忙纠正出来。

                                一直坚持我的一句话:舞台再大,你不上台,永远是观众。平台再好,你不参与,永远是局外人。

作者:走下去-别回头

物联沃分享整理
物联沃-IOTWORD物联网 » STM32使用HAL库配置中断的详细指南

发表回复