6.3.2 NVIC相关HAL库函数介绍
NVIC相关HAL库函数在“stm32f1xx_cortex.c/.h”文件中,分为中断优先级配置函数、中断使能/禁止函数、中断挂起/解挂函数、其他中断函数等,如表6.3所示。
表6.3 NVIC相关HAL库函数

续表

1.中断优先级配置函数
中断优先级配置函数包括中断优先级组配置函数和中断优先级配置函数。
(1)中断优先级组配置函数。
中断优先级组配置函数包括HAL_NVIC_SetPriorityGrouping()和HAL_NVIC_GetPriorityGrouping(),其中HAL_NVIC_SetPriorityGrouping()函数如表6.4所示。
表6.4 HAL_NVIC_SetPriorityGrouping()函数

参数PriorityGroup分为5组,分别对应抢占优先级、次优先级。STM32F1系列MCU的优先级采用0~15共16个等级的管理方式,其分组规则如表6.5所示。
表6.5 优先级分组规则

在应用中,若不设置该函数的参数,则默认参数为NVIC_PRIORITYGROUP_0。
HAL_NVIC_GetPriorityGrouping()函数用于获取设置的优先级组。
(2)中断优先级配置函数。
中断优先级配置函数包括HAL_NVIC_SetPriority()和HAL_NVIC_GetPriority(),用于实现对指定外设中断的抢占优先级数值和次优先级数值的设置,其中HAL_NVIC_SetPriority()函数如表6.6所示。(https://www.daowen.com)
表6.6 HAL_NVIC_SetPriority()函数

STM32F1系列MCU的优先级遵循如下规则。
①ARM Cortex-M3前16个系统异常优先级为负值,不可以修改,为最高等级,数值越小优先级越高。
②外设中,先判断抢占优先级再判断次优先级。抢占优先级高于次优先级,高抢占优先级可以打断低抢占优先级。抢占优先级同级不可以打断,高次优先级高于低次优先级。
③数值越小优先级越高,数值相同,则按自然优先级顺序执行。
例如,现有EXTI0、EXTI1和TIM2这3路中断优先设置如下,试分析优先关系。

分析可知,3路中断优先级关系为TIM2_IRQn>EXTI0_IRQn>EXTI1_IRQn。TIM2_IRQn、EXTI0_IRQn可以打断EXTI1_IRQn,但TIM2_IRQn与EXTI0_IRQn不可以相互打断。
2.中断使能/禁止函数
中断使能/禁止函数的功能是使能NVIC中断开关与禁止NVIC中断开关,只有将NVIC开关使能,才能将外设中断的标志传到内核。其中的中断使能函数HAL_NVIC_EnableIRQ()如表6.7所示。
表6.7 HAL_NVIC_EnableIRQ()函数

例如,要使能PA0的中断,其函数设置如下。
![]()
NVIC中断禁止函数HAL_NVIC_DisableIRQ()的使能方法与HAL_NVIC_EnableIRQ()函数一致。
中断挂起/解挂函数和其他中断函数在实际应用中使用较少,有兴趣的读者请参阅HAL库使用手册来了解这些函数。