STM32F4XX NVIC中断优先级理解

在STM32的开发中我们时常会用到中断,但是STM32的中断源繁多,也很容易出错,所以反复学习NVIC中断优先管理很有必要。

CM4 内核支持 256 个中断,其中包含了 16 个内核中断和 240 个外部中断,并且具有 256 级的可编程中断设置。但STM32F407 并没有使用 CM4 内核的全部东西,而是只用了它的一部分。

STM32F4xx 则总共有 101 个中断,包括 10 个内核中断和 91 个可屏蔽中断(外部中断),具有 16 级可编程的中断优先级,而我们常用的就是这 91 个可屏蔽中断。

在这里插入图片描述
PS:这里的外部中断是除了内核中断以外的中断。

STM32F4XX 将中断分为 5 个组,组 0~4。
该分组的设置是由 SCB->AIRCR 寄存器的 bit10-8来定义的。
IP八位寄存器只有IP[90]~IP[0]在使用,并且只有高四位用来设置抢占和响应优先级。这里也就对应了STM32F4XX只有16级可编程的中断优先级。

在这里插入图片描述
关于抢占优先级和响应优先级的理解如图所示:在这里插入图片描述

情况一:在同时发生中断时,因为抢占优先级一样,响应优先级数值越低越优先所以:优先级的情况为 中断1>中断2>中断3;
但是在中断2/3在执行的时候,中断1无法打断,只有中断2/3执行完后才会执行中断1。

情况二:在同时发生中断时,抢占优先级数值越低越优先所以:优先级的情况为 中断1>中断2>中断3;
在中断2/3在执行的时候,中断1可以打断,然后执行完中断1在返回执行中断2/3。

最后我们总结一下中断优先级设置的步骤:

1、系统运行开始的时候设置中断分组。确定组号,也就是确定抢占优先级和响应优先级的 分配位数。在文件 stm32f4xx_hal.c
内部定义函数 HAL_Init 中有调用HAL_NVIC_PriorityGroupConfig 函数进行相关设置,所以我们只需要修改HAL_Init 内部对中断优先级分组设置即可。
2、 设置单个中断的中断优先级别和使能相应中断通道, 使用到的函数主要为 HAL_NVIC_SetPriority 和HAL_NVIC_EnableIRQ。

PS:具体可以参照官方的例程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值