STM32 中断优先级相关概念与使用笔记
上海 华东师范大学 通信工程系 ma-chao
一、基本概念
1.ARM cortex_m3 内核支持 256 个中断(16 个内核+240 外部)和可编程 256 级中断优先级
的设置,与其相关的中断控制和中断优先级控制寄存器(NVIC、SYSTICK 等)也都属于
cortex_m3 内核的部分。STM32 采用了 cortex_m3 内核,所以这部分仍旧保留使用,但 STM32
并没有使用 cortex_m3 内核全部的东西(如内存保护单元 MPU 等),因此它的 NVIC 是
cortex_m3 内核的 NVIC 的子集。
2.STM32 目前支持的中断共为 84 个(16 个内核+68 个外部),和 16 级可编程中断优先级
的设置(仅使用中断优先级设置 8bit 中的高 4 位,见后面解释)。《参考最新 101xx-107xx
STM32 Reference manual, RM0008》。
3.以下主要对“外部中断通道”进行说明。
对于 cortex_m3 内核所支持的 240 个外部中断,我在这里使用了“中断通道”这个概
念,因为尽管每个中断对应一个外围设备,但该外围设备通常具备若干个可以引起中断的
中断源或中断事件。而该设备的所有的中断都只能通过该指定的“中断通道”向内核申请
中断。因此,下面关于中断优先级的概念都是针对“中断通道”的。当该中断通道的优先
级确定后,也就确定了该外围设备的中断优先级,并且该设备所能产生的所有类型的中断,
都享有相同的通道中断优先级。至于该设备本身产生的多个中断的执行顺序,则取决于用
户的中断服务程序。
4. STM32 可以支持的 68 个外部中断通道,已经固定的分配给相应的外部设备。每个中断
通道都具备自己的中断优先级控制字节 PRI_n(8 位,但在 STM32 中只使用 4 位,高 4 位有
效),每 4 个通道的 8 位中断优先级控制字(PRI_n)构成一个 32 位的优先级寄存器(Priority
Register)。68 个通道的优先级控制字至少构成 17 个 32 位的优先级寄存器,它们是 NVIC
寄存器中的一个重要部分。
5.对于这 4bit 的中断优先级控制位还必须分成 2 组看:从高位开始,前面是定义抢先式优
先级的位,后面用于定义子优先级。4bit 的分组组合可以有以下几种形式:
编 号 分配情况
7 0:4 无抢先式优先级,16 个子优先级
6 1:3 2 个抢先式优先级,8 个子优先级
5 2:2 4 个抢先式优先级,4 个子优先级
4 3:1 8 个抢先式优先级,2 个子优先级
3/2/1/0 4:0 16 个抢先式优先级,无子优先级
6.在一个系统中,通常只使用上面 5 种分配情况的一种,具体采用哪一种,需要在初始化
时写入到一个 32 位寄存器 AIRC(Application Interrupt and Reset Control Register)