NVIC与外部中断
2025/9/8大约 2 分钟
IRQHandler()函数
检测中断源,处理中断标志位(清除),调用回调函数
没有IRQ的要手动清楚中断标志位
NVIC(中断向量表)
抢占优先级和响应优先级
STM32 的中断向量具有两个属性,一个为抢占属性,另一个为响应属性,
其属性编号越小,表明它的优先级别越高。
抢占,是指打断其它中断的属性,即因为具有这个属性,会出现嵌套中断
(在执行中断服务函数 A 的过程中被中断 B 打断,执行完中断服务函数 B 再继续
执行中断服务函数 A),抢占属性由 NVIC_IRQChannelPreemptionPriority 的参
数配置。
而响应属性则应用在抢占属性相同的情况下,当两个中断向量的抢占优先
级相同时,如果两个中断同时到达,则先处理响应优先级高的中断,响应属性
由 NVIC_IRQChannelSubPriority 的参数配置。
例如,现在有三个中断向量:
中断向量 抢占优先级 响应优先级
A 0 0
B 1 0
C 1 1
若内核正在执行 C 的中断服务函数,则它能被抢占优先级更高的中断 A 打
断,由于 B 和 C 的抢占优先级相同,所以 C 不能被 B 打断。但如果 B 和 C 中断
是同时到达的,内核就会首先响应响应优先级别更高的 B 中断
外部中断实验
中断控制线



每次发生外部中断时就会调用相应的IRQ(中断请求)函数,然后通过HAL库的中断函数,调用回调函数。
自定义逻辑写在回调函数里,自带的中断等逻辑写在HAL库的中断函数里


比写按键扫描函数来控制LED灯容易实现
注意:GPIO中断模式配置时,要选择具体怎么触发。这里按键按下(除WK_UP)电平由上拉电阻带来的高电平转化为低电平,所以选择下降沿触发。否则,按下后基本没反应,就算有那也只是抖动带来的毛刺

