[STM32H7] stm32H7优先级分组

[复制链接]
955|12
 楼主| 云雨海 发表于 2025-4-24 22:20 | 显示全部楼层 |阅读模式
STM32 的中断优先级是一个 8 位值,但通常只使用其中的高 4 位
可以被划分为两部分:
  • 抢占优先级(Preemption Priority) :决定中断是否可以打断另一个正在执行的中断。
  • 子优先级(Subpriority) :当多个中断同时发生时,用于决定它们的执行顺序。

通过设置优先级分组,可以动态调整抢占优先级和子优先级的位数分配。
其分配如下:
87095680a4700c5595.png
配置优先级分组
在 STM32 中,可以通过   HAL_NVIC_SetPriorityGrouping(xxx);函数设置优先级分组。该函数定义在 HAL库中。
设置中断优先级
在设置了优先级分组后,可以使用 HAL_NVIC_SetPriority() 函数为每个中断设置具体的优先级。
  • HAL_NVIC_SetPriority() 参数如下
  • 第一个参数是中断号(俗称句柄)。
  • 第二个参数是抢占优先级(主优先级)。
  • 第三个参数是子优先级。

5498680a46d05c477.png
xiaoqizi 发表于 2025-6-5 08:36 | 显示全部楼层
STM32H7的中断优先级分组设置由SCB->AIRCR寄存器的bit10~8来定义
木木guainv 发表于 2025-6-5 10:45 | 显示全部楼层
在STM32H7中,中断优先级分组决定了中断的响应顺序和嵌套关系
Jiangxiaopi 发表于 2025-6-5 13:08 | 显示全部楼层
STM32H7的中断优先级使用4位来表示,这4位又被分为抢占优先级和响应优先级两部分
荣陶陶 发表于 2025-6-5 15:39 | 显示全部楼层
在HAL库中,可通过[size=0.875]NVIC_PriorityGroupConfig函数来设置优先级分组
Zhiniaocun 发表于 2025-6-5 17:58 | 显示全部楼层
通过对SCB->AIRCR寄存器的相关位进行赋值来设置优先级分组,但这种方式相对较复杂,一般不建议直接使用,除非对底层硬件和寄存器操作非常熟悉
Zuocidian 发表于 2025-6-5 20:17 | 显示全部楼层
系统上电复位后,默认使用的是优先级分组0
Puchou 发表于 2025-6-5 22:35 | 显示全部楼层
抢占优先级和响应优先级的数值范围均为0 - 15,且配置时它们合并成的4bit数字的数值越小,优先级越高
Xiashiqi 发表于 2025-6-6 08:45 | 显示全部楼层
Reset、NMI、Hard Fault等中断的优先级为负数,高于普通中断优先级,且优先级不可配置
小海师 发表于 2025-6-6 11:05 | 显示全部楼层
组4仅有抢占优先级,没有响应优先级,所有中断的响应顺序完全由抢占优先级决定
Haizangwang 发表于 2025-6-6 13:22 | 显示全部楼层
组1有1位抢占优先级,3位响应优先级。可将中断分为两个抢占优先级等级,高抢占优先级的中断可以打断低抢占优先级的中断
codingtuzi 发表于 2025-6-6 21:23 | 显示全部楼层
中断优先级非常重要,不过,感觉一般使用默认的即可。
a1092994373 发表于 2025-7-4 16:56 | 显示全部楼层
学到了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部