stm32H7优先级分组
STM32 的中断优先级是一个 8 位值,但通常只使用其中的高 4 位可以被划分为两部分:[*]抢占优先级(Preemption Priority) :决定中断是否可以打断另一个正在执行的中断。
[*]子优先级(Subpriority) :当多个中断同时发生时,用于决定它们的执行顺序。
通过设置优先级分组,可以动态调整抢占优先级和子优先级的位数分配。其分配如下:配置优先级分组在 STM32 中,可以通过 HAL_NVIC_SetPriorityGrouping(xxx);函数设置优先级分组。该函数定义在 HAL库中。设置中断优先级在设置了优先级分组后,可以使用 HAL_NVIC_SetPriority() 函数为每个中断设置具体的优先级。
[*]HAL_NVIC_SetPriority() 参数如下
[*]第一个参数是中断号(俗称句柄)。
[*]第二个参数是抢占优先级(主优先级)。
[*]第三个参数是子优先级。
STM32H7的中断优先级分组设置由SCB->AIRCR寄存器的bit10~8来定义 在STM32H7中,中断优先级分组决定了中断的响应顺序和嵌套关系
STM32H7的中断优先级使用4位来表示,这4位又被分为抢占优先级和响应优先级两部分
在HAL库中,可通过NVIC_PriorityGroupConfig函数来设置优先级分组
通过对SCB->AIRCR寄存器的相关位进行赋值来设置优先级分组,但这种方式相对较复杂,一般不建议直接使用,除非对底层硬件和寄存器操作非常熟悉
系统上电复位后,默认使用的是优先级分组0
抢占优先级和响应优先级的数值范围均为0 - 15,且配置时它们合并成的4bit数字的数值越小,优先级越高
Reset、NMI、Hard Fault等中断的优先级为负数,高于普通中断优先级,且优先级不可配置
组4仅有抢占优先级,没有响应优先级,所有中断的响应顺序完全由抢占优先级决定
组1有1位抢占优先级,3位响应优先级。可将中断分为两个抢占优先级等级,高抢占优先级的中断可以打断低抢占优先级的中断
中断优先级非常重要,不过,感觉一般使用默认的即可。
学到了
页:
[1]