GPIO中断/外部中断EXTI的初始化

简介: GPIO中断/外部中断EXTI的初始化

STM32的HAL库开发系列 - GPIO中断/外部中断EXTI的初始化

在应用中,STM32的GPIO中断/外部中断EXTI常用于外设控制,如按键检测、计数器等。同时也用于其他系统中,如智能家居、智能交通、工业控制等。

这部分一般由CubeMX自动生成,但了解其中的过程也是有必要的。

STM32的GPIO中断/外部中断EXTI还可以支持软件中断和硬件中断两种方式,软件中断可以通过软件代码实现中断,硬件中断则是通过硬件外设实现中断。

  // 引脚定义
 #define KEY_INT_GPIO_PORT                GPIOA
 #define KEY_INT_GPIO_CLK_ENABLE()        __GPIOA_CLK_ENABLE();
 #define KEY_INT_GPIO_PIN                 GPIO_PIN_0
 #define KEY_INT_EXTI_IRQ                 EXTI0_IRQn
 #define KEY_IRQHandler                   EXTI0_IRQHandler
 
 // 初始化函数
 void EXTI_Key_Config(void)
 {
     GPIO_InitTypeDef GPIO_InitStructure;

     /*开启按键GPIO口的时钟*/
     KEY_INT_GPIO_CLK_ENABLE();

     /* 选择按键的引脚 */
     GPIO_InitStructure.Pin = KEY_INT_GPIO_PIN;
     /* 设置引脚为输入模式 */
     GPIO_InitStructure.Mode = GPIO_MODE_IT_RISING;
     /* 设置引脚不上拉也不下拉 */
     GPIO_InitStructure.Pull = GPIO_NOPULL;
     /* 使用上面的结构体初始化按键 */
     HAL_GPIO_Init(KEY_INT_GPIO_PORT, &GPIO_InitStructure);
     /* 配置 EXTI 中断源 到 KEY 引脚、配置中断优先级*/
     HAL_NVIC_SetPriority(KEY_INT_EXTI_IRQ, 0, 0);
     /* 使能中断 */
     HAL_NVIC_EnableIRQ(KEY_INT_EXTI_IRQ);
 }

自己实现中断服务函数。这里没有调用中断回调函数,而是直接在服务函数内完成动作。

在使用STM32的GPIO中断/外部中断EXTI时,需要在程序中实现中断服务程序,用来响应中断事件并执行相应的操作。中断服务程序通常需要在硬件中断向量表中注册,以便在中断发生时被系统调用。

 // 中断服务函数
 void KEY_IRQHandler(void)
 {
     // 确保是否产生了EXTI Line中断
     if (__HAL_GPIO_EXTI_GET_IT(KEY_INT_GPIO_PIN) != RESET) {
         // LED电平翻转
         LED1_TOGGLE;
         // 清除中断标志位
         __HAL_GPIO_EXTI_CLEAR_IT(KEY_INT_GPIO_PIN);
     }
 }

另外,在使用STM32的GPIO中断/外部中断EXTI时,需要注意中断的启用和禁用,避免在不需要的时候浪费系统资源。在中断服务程序中,还需要注意中断的嵌套,避免中断死循环。

主函数如下:

 int main(void)
 {
    SystemClock_Config();

    LED_GPIO_Config();

    /* 
    初始化EXTI中断,按下按键会触发中断,
    触发中断会进入stm32f4xx_it.c文件中的函数
    KEY1_IRQHandler和KEY2_IRQHandler,处理中断,反转LED灯。
    */
    EXTI_Key_Config();

    // 等待中断,由于使用中断方式,CPU不用轮询按键
    while (1) {
    }
  }

STM32的GPIO中断/外部中断EXTI是STM32微控制器中一项重要功能,它可以帮助我们在系统中更好的响应外部设备的变化,提高系统的可靠性和灵活性。使用时需要注意中断服务程序、中断启用和禁用、中断嵌套等问题。

目录
相关文章
|
传感器 开发工具 C语言
EXTI外部中断介绍(内置1.中断系统+2.中断执行流程+3.STM32中断+4.NVIC基本结构+5.NVIC优先级分组+6.EXTI简介+7.EXTI基本结构...)
EXTI外部中断介绍(内置1.中断系统+2.中断执行流程+3.STM32中断+4.NVIC基本结构+5.NVIC优先级分组+6.EXTI简介+7.EXTI基本结构...)
318 0
EXTI外部中断介绍(内置1.中断系统+2.中断执行流程+3.STM32中断+4.NVIC基本结构+5.NVIC优先级分组+6.EXTI简介+7.EXTI基本结构...)
|
6月前
|
传感器 存储
STM32--EXTI外部中断
STM32--EXTI外部中断
STM32定时器SysTick实现的延时函数
STM32定时器SysTick实现的延时函数
135 0
STM32外部中断解析
STM32外部中断解析
251 0
|
芯片
STM32F103C8 EXTI外部中断
STM32F103C8 EXTI外部中断
104 0
STM32F103C8 TIM定时器中断
STM32F103C8 TIM定时器中断
171 0
STM32 EXTI外部中断
外部中断 是单片机实时地处理外部事件的一种内部机制。当某种外部事件发生时,单片机的中断系统将迫使CPU暂停正在执行的程序,转而去进行中断事件的处理;中断处理完毕后.又返回被中断的程序处,继续执行下去. 外部中断 是指由 外部设备 发出的 中断请求 ,如键盘、鼠标、计时器、网络数据等。外部中断可以提高系统的效率,使系统能够有效地处理外部设备发出的中断请求,从而改善系统的性能。
149 0
STM32 EXTI外部中断
STM32_NVIC寄存器详解
STM32_NVIC寄存器详解
319 0
7-外部中断事件控制器(EXTI)
7-外部中断事件控制器(EXTI)
|
数据格式
【STM32】串口通讯USART串口中断配置
【STM32】串口通讯USART串口中断配置
592 0