STM32中断优先级分组有哪几种?

STM32中断优先级分组主要有以下5种:

  • 分组0:所有16位用于子优先级,没有抢占优先级。此时可配置的子优先级为0~15,共16级,适用于系统中对中断实时性要求不高,且中断源较多,需要更多子优先级来区分不同中断的情况。
  • 分组1:最高1位用于抢占优先级,最低3位用于子优先级。可配置的抢占优先级为0和1,共2级;子优先级为0~7,共8级。适用于系统中有少数中断需要较高的实时响应,同时又有一些中断可以在其他中断处理过程中被打断,但需要通过子优先级来进一步区分同一抢占优先级下不同中断的情况。
  • 分组2:最高2位用于抢占优先级,最低2位用于子优先级。可配置的抢占优先级为03,共4级;子优先级为03,共4级。这种分组方式在抢占优先级和子优先级的分配上比较均衡,适用于系统中不同中断对实时性要求有一定差异,且需要在不同级别中断之间进行合理调度的情况。
  • 分组3:最高3位用于抢占优先级,最低1位用于子优先级。可配置的抢占优先级为0~7,共8级;子优先级为0和1,共2级。适用于系统中大部分中断需要有不同程度的实时响应,且对抢占优先级的需求较高,而子优先级只需简单区分的情况。
  • 分组4:所有16位用于抢占优先级,没有子优先级。可配置的抢占优先级为0~15,共16级,适用于系统中对中断实时性要求很高,每个中断都需要独立的抢占优先级,而不需要通过子优先级来进一步区分的情况。

在实际应用中,可根据具体的系统需求,通过调用HAL_NVIC_SetPriorityGr

### STM32 HAL库中断优先级配置 #### 中断优先级分组函数 在STM32微控制器中,通过调用`HAL_NVIC_SetPriorityGrouping`来设定中断系统的优先级分组模式。此函数允许开发者指定预占优先级位数与子优先级位数之间的分配方式[^2]。 对于Cortex-M系列处理器而言,NVIC支持可编程的中断优先级机制,其中包含了抢占式优先级(preemption priority)和副优先级(subpriority),两者共同决定了多个待处理中断间的调度顺序。当两个不同源触发了各自的ISR请求时,具有较高抢占级别的那个会打断当前正在执行的服务程序;而如果二者处于同一级别,则依据后者判断谁应该获得CPU控制权继续运行下去。 ```c // 设置优先级分组为只使用抢占优先级 HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_PREEMPTION); ``` #### 配置具体外设中断优先级 为了给定某个具体的外围设备关联之中断事件指派相应的紧急程度,需利用到`HAL_NVIC_SetPriority`接口。该API接收三个参数——目标IRQ编号、所期望达到的最大限度内的抢夺权重值以及次序上的细微差别量度[^3]: - `uint32_t PreemptPriority`: 定义了该类别的绝对重要性等级,在多任务环境中用来决定哪一个可以中途插队执行; - `uint32_t SubPriority`: 当存在相同抢占层次的情况下进一步细分先后秩序的标准。 下面是一段示例代码展示了如何针对TIM2定时器溢出中断进行上述属性定制化操作的过程: ```c #include "stm32f1xx_hal.h" /* 初始化并使能 TIM2 的更新 (溢出) 中断 */ static void MX_TIM2_Init(void) { __HAL_RCC_TIM2_CLK_ENABLE(); /* ...其他初始化设置... */ // 启动自动重装载计数向上模式下的周期性中断 HAL_NVIC_EnableIRQ(TIM2_IRQn); // 设定 TIM2 更新中断拥有较低但非最低的整体优先级, // 并且在同一抢占层内赋予其较高的相对位置. HAL_NVIC_SetPriority(TIM2_IRQn, 2, 0); } int main(void) { HAL_Init(); SystemClock_Config(); // 系统时钟配置 MX_GPIO_Init(); // GPIO端口初始化 MX_USARTx_UART_Init();// UART串行通信接口启动 MX_TIM2_Init(); // 调用上面定义的方法完成定时组件准备 while (1){ // 主循环体... } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

道亦无名

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值