STM32中断编程详解:配置外部中断和中断服务例程

在STM32微控制器编程中,中断是实现实时响应和多任务处理的关键技术。本文将详细介绍如何配置STM32的外部中断(EXTI)和编写中断服务例程(ISR)。

一、外部中断(EXTI)概述

STM32的外部中断/事件控制器(EXTI)管理20个外部中断线和事件线。每个中断线可以配置为响应上升沿、下降沿或双边沿触发。

二、NVIC配置

NVIC(Nested Vectored Interrupt Controller)是STM32的中断控制器,负责管理中断请求、优先级和中断向量。配置NVIC的步骤如下:

  1. 设置中断优先级分组

    c 复制代码
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

    这行代码设置了NVIC的优先级分组,决定了抢占优先级和子优先级的位数分配。

  2. 设置中断通道的优先级

    c 复制代码
    NVIC_InitTypeDef NVIC_InitStructure;
    NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);

    这段代码初始化了NVIC,设置了中断线的抢占优先级和子优先级,并使能了中断线。

三、外部中断(EXTI)配置

配置外部中断的步骤如下:

  1. 使能GPIO时钟

    c 复制代码
    __HAL_RCC_GPIOA_CLK_ENABLE();
  2. 配置GPIO为输入模式

    c 复制代码
    GPIO_InitTypeDef GPIO_InitStruct;
    GPIO_InitStruct.Pin = GPIO_PIN_0;
    GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  3. 连接EXTI线到GPIO

    c 复制代码
    SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0);
  4. 初始化EXTI线

    c 复制代码
    EXTI_InitTypeDef EXTI_InitStruct;
    EXTI_InitStruct.Line = EXTI_Line0;
    EXTI_InitStruct.Mode = EXTI_Mode_Interrupt;
    EXTI_InitStruct.Trigger = EXTI_Trigger_Falling;
    EXTI_InitStruct.LineCmd = ENABLE;
    HAL_EXTI_Init(&EXTI_InitStruct);

四、编写中断服务例程(ISR)

每个外部中断线都需要一个对应的中断服务例程。以下是EXTI0的中断服务例程示例:

c 复制代码
void EXTI0_IRQHandler(void)
{
    if(__HAL_GPIO_EXTI_GET_IT(GPIO_PIN_0) != RESET)
    {
        __HAL_GPIO_EXTI_CLEAR_IT(GPIO_PIN_0);
        // 执行中断处理逻辑
    }
}

在这个例程中,我们首先检查是否是GPIO_PIN_0触发了中断,如果是,则清除中断标志位,并执行相应的处理逻辑。

五、总结

通过上述步骤,我们可以配置STM32的外部中断和编写中断服务例程。正确配置NVIC和EXTI对于确保系统的实时响应和稳定性至关重要。在实际应用中,开发者应根据具体需求合理配置中断优先级,以实现高效的中断处理。

✅作者简介:热爱科研的嵌入式开发者,修心和技术同步精进

❤欢迎关注我的知乎:对error视而不见

代码获取、问题探讨及文章转载可私信。

☁ 愿你的生命中有够多的云翳,来造就一个美丽的黄昏。

🍎获取更多嵌入式资料可点击链接进群领取,谢谢支持!👇

点击领取更多详细资料

相关推荐
天空'之城1 小时前
单片机基础核心知识点汇总(五)
单片机·嵌入式硬件
恒锐丰-罗生7 小时前
SS8103 芯片解析:45V 同步整流降压半桥恒流驱动控制器 大功率光源国产优选 告别低灰闪烁!
驱动开发·嵌入式硬件·硬件工程
FakeOccupational8 小时前
【电路笔记 STM32】stm32f103 实现HAL_UART_Transmit_DMA + 普通模式/连续模式的 UART DMA 收发
笔记·stm32·嵌入式硬件
wuyk5558 小时前
第 6 章 FOC 完整系统整合:从算法到真机跑起来
c语言·开发语言·stm32·单片机·嵌入式硬件
恒锐丰科技韩生8 小时前
率能 SS6810H|10‑32V 双通道 H 桥步进电机驱动 ETSSOP20 打印机安防舞台灯光专用
嵌入式硬件·硬件工程
156082072198 小时前
直流耦合采集卡前端电路调试
嵌入式硬件·fpga开发
恒锐丰科技林技术员10 小时前
SS6841T 双通道 H 桥驱动芯片:大电流集成电机驱动优选方案
单片机·嵌入式硬件
打工陈10 小时前
器件知识——(1)磁珠与电感
嵌入式硬件·智能硬件·设计规范
LCG元10 小时前
STM32 HAL 库串口 DMA + 空闲中断接收不定长数据:从原理到排查“上电误进 IDLE“
stm32·单片机·嵌入式硬件
乘凉~12 小时前
【Keil5】Keil5 安装和免费使用过程记录
stm32·单片机·嵌入式硬件