NVIC中断
CM4内核支持256个中断,其中包含了16个内核中断和240个外部中断(注:这里的外部中断是相对内核中断而言的,非内核中断的其他中断在这里统一成为外部中断),并且具有256级的可编程中断设置。
但是STM32F只用了内核的一部分中断。
- STM32F40xx/STM32F41xx总共有92个
- STM32F42xx/STM32F43xx总共有96个中断
STM32F40xx/STM32F41xx的92个中断里面,包括10个内核中断和82个可屏蔽中断,具有16级可编程的中断优先级,而我们常用的就是这82个可屏蔽中断。
中断优先级
stm32F4中断优先级分为 抢占优先级(先占优先级) 和 响应优先级(从优先级)
- 数值越小的中断优先级越高(无论是抢占优先级hi是响应优先级)
- 抢占优先级的“抢占”意思为是否能打断其它正在运行的中断处理函数,抢占优先级高就可以打断优先级低的中断,否则就不能
- 响应优先级的“响应”意思为当两个抢占优先级相等的中断同时发生,系统则需要根据响应优先级的大小来决定优先响应哪一个中断事件。
(注:响应优先级不能作为判断该中断是否能打断其他中断的依据,就是说当中断A的处理函数正在运行,此时另一个同抢占优先级的中断B发生,不管B的响应优先级是否高于A,都不能打断中断A的中断处理函数) - 从以上两点可以看出,抢占优先级 比 响应优先级 要优先考虑。(即:当两个中断发生,如果两个中断的抢占优先级不等,那么抢占优先级高的中断处理函数先运行。当然,如果两个中断的抢占优先级和响应优先级都相等,那么谁先发生就先相应谁。)
- 中断的打断与抢占称为 中断向量嵌套。下面举个栗子来解释:三个不同中断的抢占优先级如下A<B<C,首先中断A运行一半,B中断发生,程序放下手头上的工作(中断A响应函数)去处理中断B,而中断B还没处理完,此时中断C发生了,程序会先把中断C处理完在回来继续处理中断B为完成的任务,完成B之后才继续处理中断A的剩余任务。