1. STM32中断控制器基础解析
STM32微控制器的中断系统是其响应外部事件的核心机制,NVIC(嵌套向量中断控制器)作为Cortex-M内核的标准配置,负责管理所有中断源的优先级和响应流程。与传统的51单片机不同,STM32的中断架构具有真正的硬件优先级管理能力,支持中断嵌套和动态优先级调整。
以STM32F103系列为例,其NVIC最多支持256个中断优先级(实际可用数量取决于具体型号),每个优先级可配置为16个抢占等级和16个子优先级。这种设计使得关键中断(如电机控制PWM)可以打断非关键中断(如按键扫描)的执行,确保实时性要求高的任务得到及时响应。
关键提示:STM32的中断优先级数值越小优先级越高,这与许多RTOS的优先级定义相反,配置时需特别注意。
1.1 NVIC工作原理详解
NVIC采用向量表跳转机制,当中断发生时,处理器会自动从内存中的向量表获取中断服务程序(ISR)入口地址。这个过程的硬件时序如下:
- 完成当前指令执行
- 将关键寄存器压栈(自动保存现场)
- 从向量表获取ISR地址
- 跳转到ISR执行
- 执行完毕后通过BX LR指令返回
在代码层面,使用标准外设库配置NVIC的典型流程如下:
c复制NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; // 选择EXTI0中断线
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F; // 抢占优先级15
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F; // 子优先级15
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; // 使能中断
NVIC_Init(&NVIC_InitStructure);
1.2 EXTI外部中断控制器
EXTI(External Interrupt/Event Controller)是STM32专门用于处理GPIO外部中断的模块,具有以下特性:
- 支持20个中断/事件线(型号不同可能有差异)
- 每条
