中断:正常情况下单片机根据代码内容按照顺序执行指令,执行过程中如果遇到其他紧急的事件需要处理,则先暂停当前任务执行紧急事件,处理完后再回到暂停点继续执行主程序,这其中的紧急事件又称为中断或异常。(CPU内部产生的紧急事件称为异常,来自CPU外部片上外设产生的紧急事件称为中断)
中断优先级:优先级数字越小优先级越高
优先级由抢占优先级和子优先级构成。具有高优先级的中断可以打断低优先级的中断,实现中断的嵌套,抢占优先级可以决定是否产生中断的嵌套,子优先级决定中断响应的顺序。
中断1 抢占优先级1 子优先级1 1.抢占优先级高的中断可以中断抢占优先级低的中断
中断2 抢占优先级0 子优先级0 2.两个中断的抢占优先级相同,后来中断要等前面的中断处理完
中断3 抢占优先级1 子优先级0 3.两个中断的抢占优先级相同,同时产生,子优先级高的先执行
中断4 抢占优先级1 子优先级1 4.抢占优先级子优先级相同同时产生,由中断向量表默认位置决定
中断都由NVIC来管理,NVIC(Nested Vectored Interrupt Controller)嵌套向量中断控制器
但GPIO产生的中断被NVIC管理前需要被EXTI(外部中断/事件控制器)来处理一下,原因是STM32的GPIO支持中断模式(指外部电平发生变化时触发中断执行中断服务函数完成对应的操作)和事件模式(指外部信号产生电平变化时联动ADC或者定时器执行相关的操作),前者需要CPU参与实现功能可以自定义功能,后者无需CPU的参与因此响应速度更快。
中断线:同组的GPIO共享一条中断线(如图中PA0~PG0都使用EXTI0,但此时它们此时都不能作为中断源,因为无法确定是谁产生的中断)