简介
Cortex3 内核支持 256 个中断,其中 16 个内核中断和 240 个外部中断,并且具有 256级的可编程中断设置。
STM32没有使用 CM3 内核的全部东西,而是只用了它的一部分。
STM32 有 84 个中断,包括 16 个内核中断和 68 个可屏蔽中断,具有 16 级可编程的中断优先级。我们常用的就是这 68 个可屏蔽中断
在STM32F103 系列上面只有 60 个可屏蔽中断。STM32F107 系列有 68 个可屏蔽中断。
STM32 的中断分组: STM32 将中断分为 5 个组,组 0 ~ 4。该分组的设置是由 SCB->AIRCR 寄存器的 bit10~8 来定义的。
组 AIRCR[10: 8] bit[7: 4]分配情况 分配结果
0 111 0: 4 0位抢占优先级,4 位响应优先级
1 110 1: 3 1 位抢占优先级, 3 位响应优先级
2 101 2: 2 2 位抢占优先级, 2 位响应优先级
3 100 3: 1 3 位抢占优先级, 1 位响应优先级
4 011 4: 0 4 位抢占优先级, 0 位响应优先级
一、两个中断的抢占优先级和响应优先级都是一样的话,哪个中断先发生就先执行
二、高优先级的抢占优先级是可以打断正在进行的低抢占优先级中断的。
三、抢占优先级相同的中断,高优先级的响应优先级不可以打断低响应优先级的中断。
1.系统中断设置优先级
NVIC 中断管理函数主要在 misc.c 文件里面。
设置整个系统的中断优先级分组
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
这个函数的作用是对中断的优先级进行分组,这个函数在系统中只能被调用一次,一旦分组确定就最好不要更改。
2.每个中断设置优先级
NVIC 中断优先级
NVIC_InitTypeDef NVIC_InitStructure; //创建中断优先级参数的结构体变量
NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn; //对应的外部中断向量
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02; //抢占优先级 2,
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02; //响应优先级 2
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中断
NVIC_Init(&NVIC_InitStructure); //中断优先级参数的所有结构体变量值 给 中断优先级寄存器