STM32 NVIC中断优先级分组说明

STM32F103系列上面,又只有60个可屏蔽中断(在107系列才有68个)
中断管理方法
首先,对STM32中断进行分组,组0~4。同时,对每个中断设置一个抢占优先级和一个响应优先级值。
分组配置是在寄存器SCB->AIRCR中配置:
这里写图片描述

  1. 高优先级的抢占优先级是可以打断正在进行的低抢占优先级中断的。
  2. 抢占优先级相同的中断,高响应优先级不可以打断低响应优先级的中断。
  3. 抢占优先级相同的中断,当两个中断同时发生的情况下,哪个响应优先级高,哪个先执行。
  4. 如果两个中断的抢占优先级和响应优先级都是一样的话,则看哪个中断先发生就先执行。
### 配置STM32 NVIC中断优先级分组STM32微控制器中,NVIC(嵌套向量中断控制器)用于管理和处理多个中断请求。为了有效管理这些中断,必须配置中断优先级分组。 #### 设置优先级分组 每个工程中的中断优先级分组只需设置一次,并应尽量保持不变。这可以通过调用`NVIC_PriorityGroupConfig()`函数来完成[^1]: ```c // 设置优先级分组为3 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_3); ``` 此操作决定了抢占优先级和响应优先级(又称子优先级)之间的位数分配。当优先级分组设为3时,意味着抢占优先级用3位,而响应优先级有剩余的1位。 #### 初始化具体中断通道 对于特定的中断源,在初始化过程中还需指定具体的抢占优先级和响应优先级数值。例如,针对外部中断线EXTI9_5,可通过如下方式设定其优先级别: ```c NVIC_InitTypeDef NVIC_InitStruct; NVIC_InitStruct.NVIC_IRQChannel = EXTI9_5_IRQn; NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 2; // 抢占优先级 NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1; // 响应优先级 NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStruct); ``` 上述代码片段展示了如何利用结构体成员变量精确指派各参数值给定目标中断线路。 #### 关于IP寄存器的作用 值得注意的是,STM32内部存在一名为IP[240]的寄存器,专门负责控制各个中断渠道的优先等级划分情况。该寄存器集合直接影响到系统能够支持的最大数量以及层次化的中断事件调度机制[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值