STM32中断的学习笔记
首先中断都需要配置AFIO,这个是用于引脚的复用功能的,因为EXTI中断没有那个IO口的引脚默认是EXTI模式的,所以如果想用EXTI,必须把这个打开。
AFIO也是一个独立的寄存器组,它有独立的clock时钟门,所以需要先开时钟,再进行配置,具体配置哪个位,参考hal库。
然后针对EXTI总结的说一下,这个主要就是管理GPIO外部中断的,但这不是全部,一般有16个GPIO中断+三四个内部事件中断。
再说下16路的GPIO中断的意思:是真的有16条线,不过所有0号的连接到了一起,比如A0,B0,C0,D0,E0,只要用了A0,其他的B0之类的就不能用中断了。
下面是硬件的流程框图:


从图中可以看出使用EXTI中断(不止是GPIO)需要设置1.触发边沿;2.触发掩码寄存器IMR;3.PR寄存器。然后就进入NVIC的仲裁决断了(软件系统)
中断的流程:


上图中NVIC选择的是EXTI9_5_IRQn这条线,为什么是这条?

对于复用EXTI的线,比如EXTI9_5_IRQn,还需要判断是哪个中断,5?6?7?8?9?这个可以由守门员,也就是“硬件流程框图”的PR寄存器来判断,整个单片机只有一个PR寄存器,还有就是PR也有一些细节。
回到主线:NVIC继续
查ISER寄存器

设置中断优先级
现在从代码的角度来跟一下这个流程:

开AFIO的时钟以及设置相关寄存器

设置触发边沿

判断IMR
然后硬件结束,就进入到了NVIC


使能对应的NVIC选择线以及设置中断优先级
一些额外的扩展:



浙公网安备 33010602011771号