STM32中断控制点灯

1.使能GPIO时钟: __HAL_RCC_GPIOA_CLK_ENABLE(); //使能GPIOA时钟
2.设置GPIO输入模式

2.1设置AFIO(开启时钟,IO口映射)

2.2设置EXTI(屏蔽,上/下沿)

第二项使用 HAL_GPIO_Init ,即可一步完成
3.设置NVIC(中断优先级分组,设置中断优先级,使能中断)

HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_2); //在 HAL_Init(); 中进行配置,配置一次即可

HAL_NVIC_SetPriority(EXTI0_IRQn,2,0); //函数参数:响应中断号,抢占优先级,响应优先级 HAL_NVIC_EnableIRQ(EXTI0_IRQn); //使能中断
4.设计中断服务函数

EXTI0_IRQHandler()

STM32仅有:EXTI0~4、EXTI9~5、EXTI15~10,7个外部中断服务函数

按键开关引脚PA0,低电平触发,也就是检测该引脚是否为低电平,注意按键要接上拉电阻

cs 复制代码
#include "sys.h"
#include "exti.h"
#include "delay.h"
#include "LED.h"
void exti_init(void)
{
	GPIO_InitTypeDef gpio_initstruct;//定义结构体变量,GPIO初始化要用到
	//打开时钟
	__HAL_RCC_GPIOA_CLK_ENABLE();    //使能GPIOA时钟
	//调用GPIO初始化函数
	gpio_initstruct.Pin = GPIO_PIN_0;  //初始化一个引脚,
	gpio_initstruct.Mode = GPIO_MODE_IT_FALLING; //下降沿,中断相关
	gpio_initstruct.Speed = GPIO_SPEED_FREQ_HIGH;//高速
	gpio_initstruct.Pull = GPIO_PULLDOWN;         //上拉
 
	HAL_GPIO_Init(GPIOA,&gpio_initstruct);//对定义的结构体变量取地址
 
	//开始设立分组2,配置优先级,使能
	HAL_NVIC_SetPriority(EXTI0_IRQn,2,0);//函数参数:响应中断号,抢占优先级,响应优先级
	HAL_NVIC_EnableIRQ(EXTI0_IRQn);    //使能中断
	
}
void EXTI0_IRQHandler(void)                    //中断服务函数
{
	HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0);      //这个函数处理EXTI中断请求
}
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();
		}
	}
	
	
}

/*****************main.c****************************************/
#include "sys.h"
#include "delay.h"
#include "LED.h"
#include "exti.h"


int main(void)
{
	
    HAL_Init();                         /* 初始化HAL库 */
    stm32_clock_init(RCC_PLL_MUL9); /* 设置时钟, 72Mhz */
	LED_init();
	exti_init();
    while(1)
    { 

	 
		LED2_off();
		delay_ms(500);
		LED2_on();
		delay_ms(500);

    }
}

 

中断服务函数无参数无返回值,

中断服务函数选择中断线EXTI0,故函数形式 EXTI0_IRQHandler

有中断 挂起寄存器(EXTI_PR) PR就被置1,读的时候又会自动清零

下面是中断处理函数和回调函数,回调函数内容可自己编写代码

相关推荐
LCMICRO-133108477467 小时前
国产长芯微LPS7118完全pin-pin替代ADP7118,是一款采用 CMOS 技术设计的低噪声、高 PSRR、快速瞬态响应、低压差线性稳压器
arm开发·单片机·嵌入式硬件·fpga开发·硬件工程·线性稳压器·adp7118
LCMICRO-133108477467 小时前
国产长芯微LM3042完全P2P替代LT3042,是一款高性能低压差线性稳压器
arm开发·单片机·嵌入式硬件·fpga开发·硬件工程·线性稳压器·lt3042
qq_401700417 小时前
TPS5430电源芯片18V转3V的电源电路,效率可高达90%
单片机·嵌入式硬件
hongmai6668888 小时前
ESP8684-WROOM-02C:一块被低估的RISC-V Wi-Fi模组
单片机·嵌入式硬件·物联网·5g·智能路由器·risc-v
KaifuZeng9 小时前
电源面试问题汇总三
单片机·嵌入式硬件·面试·电路
lhbweilai9 小时前
STM32 定时器(hal库)
stm32·单片机·嵌入式硬件
ACP广源盛139246256739 小时前
Qwen3.8-Max 开源预期下@ACP#企业级终端硬件演进机遇与 PCIe 交换芯片落地分析
大数据·人工智能·分布式·单片机·嵌入式硬件
别催小唐敲代码10 小时前
STM32 MQTT协议详解:从报文地狱到阿里云实战
stm32·嵌入式硬件·阿里云
2401_8275012810 小时前
Linux系统移植
linux·arm开发·单片机
时光の尘10 小时前
【凌鸥LKS32】基础篇(二)·Timer定时器实现LED闪烁
单片机·mcu·物联网·iot·timer·lks07