在这里插入图片描述

1.抢占优先级和响应优先级

STM32 的中断向量具有两个属性,一个为抢占属性,另一个为响应属性,其属性编号越小,表明它的优先级别越高。

抢占

是指打断其他中断的属性,即因为具有这个属性会出现嵌套中断(在执行中断服务函数A 的过程中被中断B 打断,执行完中断服务函数B 再继续执行中断服务函数A)
三.例如:
在这里插入图片描述
谁能打断谁?

若内核正在执行C 的中断服务函数,则它能被抢占优先级更高的中断A 打断,由于B和C 的抢占优先级相同,所以C 不能被B 打断。
但如果B 和C中断是同时到达的,内核就会首先响应响应优先级别更高的B 中断。

2.EXTI15_10_IRQn与EXTI9_5_IRQn的区别

EXTI0_IRQChannel :表示的是外部中断线EXTI0对应的中断函数。 EXTIN_IRQn :外部中断向量
EXTIN_IRQHandler:中断服务程序入口

2.1 中断线

IO对应外部中断线如下: PA0,PB0,PC0,PD0对应的是EXTI0中断线。
PA8,PB8,PC8,PD8对应的是EXTI8中断线。
PA15,PB15,PC15,PD15对应EXTI5中断线。

PXY对应的是EXTIY中断线,其中X为(A,B,C,D,E,F…)

2.2 中断函数

EXTI0对应的中断函数为EXTI0_IRQChannel;
EXTI1对应的中断函数为EXTI1_IRQChannel;
EXTI2对应的中断函数为EXTI2_IRQChannel;
EXTI3对应的中断函数为EXTI3_IRQChannel;
EXTI4对应的中断函数为EXTI4_IRQChannel;
EXTI5 -> EXTI9对应的中断函数为EXTI9_5_IRQHandler;
EXTI10 ->EXTI15对应的中断函数为EXTI15_10_IRQHandler;

注意:

例如:
PA11 对应的是中断线EXTI11,
对应的中断函数是EXTI15_10_IRQHandler
如果写出EXTI9_5_IRQHandler是不对的
一定要看清楚引脚的大小。

3. EXTI和NVIC的关系

3.1 NVIC(嵌套向量中断)

NVIC是Cortex-M3核心的一部分,用于为中断分组,从而分配抢占优先级和响应优先级

3.2 EXTI(外部中断):

1.EXTI是ST公司在其STM32产品上扩展的外中断控制。
2.它负责管理映射到GPIO引脚上的外中断和片内几个集成外设的中断,以及 软件中断。
3.其输出最终被映射到NVIC的相应通道。
4.配置EXTI中断的过程必然包含对NVIC的配置。

相当于EXTI是NVIC的一个儿子。

3.3 配置流程

①初始化I0口为输入。
GPIO_ Init();
②开启IO口复用时钟。
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
③设置IO口与中断线的映射关系。
void GPIO_ EXTILineConfig();
④初始化线上中断,设置触发条件等。
EXTl_Init();
⑤配置中断分组(NVIC),并使能中断。
NVIC_Init();
⑥编写中断服务函数。
EXTlx_lRQHandler();
⑦清除中断标志位
EXTL ClearITPendingBit(); 注意:此步尤为重要

如果进入中断不清除标志位,那么这一中断服务程序结束后,由于标志位还是置位的并且中断是允许的,那么还会再次进入该中断,就会发生一直在执行中断程序的情况


总结

不断深入,不断补充。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐