一、中断概述中断是微控制器MCU响应外部或内部事件的一种机制。当某个事件发生时它会打断CPU当前正在执行的程序转而去执行一个特定的函数中断服务程序ISR处理完该事件后再返回原程序继续执行。STM32的中断系统非常强大能够高效处理多种异步事件。二、嵌套向量中断控制器NVICNVIC是ARM Cortex-M内核的一部分负责管理所有中断的优先级和响应。它是STM32中断系统的核心。2.1 中断优先级STM32使用4位优先级分组可分为抢占优先级高抢占优先级的中断可以打断低抢占优先级的中断。响应优先级当抢占优先级相同时响应优先级高的先执行但不能互相打断。综上优先级的原则是抢占优先级说了算抢占优先级高的先执行可以任意打断低优先级的执行过程。抢占优先级相同时再比较响应优先级响应优先级高的先执行但不可打断其他优先级的执行。抢占和响应优先级都相同时比较自然优先级高的先执行。比较的原则是数值小的等级高优先级越靠前。优先级分组通过SCB-AIRCR寄存器的PRIGROUP位设置常见的分组方式有// 设置优先级分组为组22位抢占优先级2位响应优先级 NVIC_SetPriorityGrouping(2);2.2 NVIC的工作原理2.3 NVIC配置步骤使能中断通道NVIC_EnableIRQ(IRQn_Type IRQn)设置中断优先级NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority)清除中断挂起标志NVIC_ClearPendingIRQ(IRQn_Type IRQn)三、外部中断/事件控制器EXTIEXTI负责管理GPIO引脚的外部中断和事件。它能够检测GPIO引脚上的边沿信号上升沿、下降沿或双边沿并产生中断请求或事件。3.1 EXTI主要特性支持多达23条中断/事件线线0~15对应GPIO引脚线16~22对应特定外设事件。常用的一般是0~15的对应的GPIO的引脚来使用。可配置触发方式上升沿触发、下降沿触发、双边沿触发。软件中断/事件可以通过软件触发中断或事件。中断与事件分离中断会进入NVIC事件直接触发外设而不经过CPU。注中断和事件的区别中断要进入NVIC执行相应的中断函数需要CPU的处理。事件不需NVIC仅用内部的硬件自动控制比如TIM/DMA/ADC。3.2 EXTI线映射EXTI线0~15可以映射到任意具有相同编号的GPIO引脚。例如EXTI线0可以连接到PA0、PB0、PC0等引脚数字对应相同且需要配置使用的通道口但同一时刻只能连接到一个引脚。// 将PA0连接到EXTI线0 __HAL_RCC_GPIOA_CLK_ENABLE(); GPIO_InitTypeDef GPIO_InitStruct {0}; GPIO_InitStruct.Pin GPIO_PIN_0; GPIO_InitStruct.Mode GPIO_MODE_IT_RISING; // 上升沿中断 GPIO_InitStruct.Pull GPIO_NOPULL; HAL_GPIO_Init(GPIOA, GPIO_InitStruct); // 配置EXTI线0 HAL_NVIC_SetPriority(EXTI0_IRQn, 0, 0); HAL_NVIC_EnableIRQ(EXTI0_IRQn);3.3 EXTI的工作原理3.4 EXTI中断处理流程GPIO引脚产生边沿信号EXTI检测到边沿设置挂起标志位EXTI向NVIC发送中断请求NVIC根据优先级决定是否响应CPU跳转到对应的中断服务程序执行中断回调函数在ISR中清除EXTI挂起标志四、中断嵌套与优先级管理合理设置中断优先级对于系统稳定性至关重要。4.1 优先级设置原则实时性要求高的中断设置高优先级如电机控制、通信接收等。系统关键中断设置高优先级如看门狗、电源管理等。避免优先级反转高优先级任务不应长时间等待低优先级任务释放资源。合理使用中断屏蔽在关键代码段可以暂时屏蔽中断。4.2 中断嵌套示例// 设置EXTI0为高优先级抢占优先级0 NVIC_SetPriority(EXTI0_IRQn, 0); // 设置USART1为低优先级抢占优先级1 NVIC_SetPriority(USART1_IRQn, 1); // 当USART1中断正在执行时EXTI0中断可以打断它 // 处理完EXTI0后返回继续执行USART1中断五、常见问题与调试技巧5.1 常见问题中断不触发检查GPIO模式、EXTI配置、NVIC使能、中断标志清除。重复进入中断忘记清除中断标志位。中断优先级无效优先级分组设置错误。5.2 调试技巧通过GPIO翻转测量中断响应时间使用调试器查看NVIC和EXTI寄存器状态六、总结STM32的中断系统通过NVIC和EXTI的协同工作为嵌入式系统提供了高效的事件响应机制。在实际项目中需要根据具体需求合理设计中断优先级并注意中断相关的调试。