1、NIVC
ARM Cortex-M3 内核搭载了一个强大而方便的中断系统,称之为 NVIC(嵌套向量中断控制器)。
Cortex-M3 支持 256 个“中断通道”(16 个异常+240 个中断)以及对应的可编程 256 级中断优先级设置。
STM32 虽然采用 Cortex-M3 内核,但是只使用了其中的 84 个“中断通道”(16 个异常+68 个中断)以及 16 级中断优先级设置。
同时也记录下自己当时的一个插曲。
这个TIM6_IRQn在《STM32固件库手册》中查NVIC_IRQChannel的取值是没有的,然后咨询下老师,如下回复
再拐回头看下教程,着实一不一样
看来要不看最新的手册,要不就是直接参考头文件才行!
2、优先级及中断嵌套
优先级分为抢占优先级和响应优先级。
51所设置的优先级均属于抢占优先级,默认的便是响应优先级!
高抢占优先级可以嵌套低抢占优先级的中断。
两者抢占优先级相同,那么无论响应优先级是什么关系,这两者都没有嵌套关系。
假如两者同时发生,且抢占优先级相同,则根据响应优先级顺序执行;加入此时他们的相应优先级也相同,则根据中断清单表排位顺序执行,序号越小,对应优先级越高!
编程时需要注意:
首先要预先对程序的各个功能模块进行计算论证,开机初始化时一次性设置好优先级分组,以后就再也不动他了,避免同一个程序中使用多个优先级分组。
默认情况下,如何不设置中断优先级分组,则使用系统默认的优先级,即按照中断源清单的顺序执行。(没有抢占的概念,两者同时到来,谁的号小谁先执行!)。
具体的中断源清单可参考《STM32中文参考手册》9.1.2。
小结
①、系统运行开始的时候设置中断分组。
确定组号,也就是确定抢占优先级和子优先级的分配位数。调用函数为 NVIC_PriorityGroupConfig();
②. 设置所用到的中断的中断优先级别。
对每个中断调用函数为 NVIC_Init();