HAL_NVIC_SetPriority():设置中断优先级
HAL_NVIC_SetPriority()
函数是一个用于设置中断优先级的函数,其定义如下:
void HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority);
其中,参数含义如下:
-
IRQn
:指定要设置优先级的中断号,类型为IRQn_Type,定义在stm32f4xx.h头文件中; -
PreemptPriority
:指定抢占优先级,取值范围为0~15,其中0表示最高优先级,15表示最低优先级; -
SubPriority
:指定响应优先级,取值范围为0~15,其中0表示最高优先级,15表示最低优先级。
函数作用:
该函数用于设置指定中断的抢占优先级和响应优先级,这两个优先级共同决定了中断的优先级。在中断发生时,系统会优先处理优先级高的中断,如果有多个中断的优先级相同,则按照优先级高低的顺序依次处理。
要使用 HAL_NVIC_SetPriority(),您需要提供中断号和优先级作为参数。 例如,要设置 EXTI 线路 0 的中断优先级,您可以使用以下代码:
HAL_NVIC_SetPriority(EXTI0_IRQn, 0, 0);
在这个例子中,第一个参数是中断号(EXTI0_IRQn),第二个参数是抢占优先级(0),第三个参数是子优先级(0)。
请注意,可以根据系统要求配置不同的优先级。 因此,对于中断优先级配置的细节,参考具体微控制器的参考手册是很重要的。
HAL_NVIC_EnableIRQ():使能中断
HAL_NVIC_EnableIRQ() 函数是 STM32 HAL 库中的一个函数,用于使能 NVIC(Nested Vector Interrupt Controller)中特定的中断线。
函数原型为:
void HAL_NVIC_EnableIRQ(IRQn_Type IRQn);
其中,IRQn
参数为需要使能的中断线对应的枚举类型。
函数作用是将 IRQn
对应的中断线的中断使能位设置为 1,从而使该中断线的中断能够被触发。
以下是该函数的详细讲解,附带中文注释:
/**
* @brief 使能指定的中断线
* @param IRQn: 中断线对应的枚举类型
* @retval 无
*/
void HAL_NVIC_EnableIRQ(IRQn_Type IRQn)
{
/* 对于 Cortex-M 系列的处理器,NVIC 的寄存器可以通过内存映射的方式访问 */
/* NVIC_ISER 寄存器用于使能中断线,其每个位对应一个中断线,设置为 1 表示对应的中断线使能 */
/* IRQn 是一个枚举类型,其值对应了中断线的编号,可以直接作为 NVIC_ISER 寄存器中的位偏移量 */
/* 在 STM32 HAL 库中,使用了 CMSIS 标准库提供的宏来访问 NVIC_ISER 寄存器 */
/* 以下语句等价于 NVIC->ISER[IRQn >> 5] = (uint32_t)(1 << (IRQn & 0x1F)); */
/* 该语句将 IRQn 对应的中断线的中断使能位设置为 1,从而使该中断线的中断能够被触发 */
__HAL_NVIC_ENABLE_IRQ(IRQn);
}
需要注意的是,该函数只负责使能中断线,不会对中断服务函数进行注册或配置。在使用该函数之前,需要先通过其他手段配置好对应中断线的优先级。文章来源:https://www.toymoban.com/news/detail-731485.html
结束
如果对你有帮助,点赞支持一下吧。
转载联系作者。文章来源地址https://www.toymoban.com/news/detail-731485.html
到了这里,关于中断相关操作函数HAL_NVIC_SetPriority()、HAL_NVIC_EnableIRQ()的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!