当前位置: 首页 > news >正文

中断相关操作函数HAL_NVIC_SetPriority()、HAL_NVIC_EnableIRQ()

文章目录

  • HAL_NVIC_SetPriority():设置中断优先级
  • HAL_NVIC_EnableIRQ():使能中断
  • 结束

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);
}

需要注意的是,该函数只负责使能中断线,不会对中断服务函数进行注册或配置。在使用该函数之前,需要先通过其他手段配置好对应中断线的优先级。

结束

如果对你有帮助,点赞支持一下吧。
转载联系作者。

http://www.lryc.cn/news/41958.html

相关文章:

  • 企业增长秘诀丨设立优质的帮助中心,加深用户产品使用深度,促进产品转化
  • 3.OSPF与BGP的联动
  • 机器学习算法——决策树详解
  • 配置Jenkins
  • 【STL三】序列容器——array容器
  • 【STL四】序列容器——vector容器
  • 4年功能测试,我一进阶python接口自动化测试,跳槽拿了20k......
  • 基于Pytorch的可视化工具
  • XCPC第十一站,带你学会图论基本算法
  • 【MySQL】1 MySQL的下载、安装与配置|提供安装包
  • Redis 事务
  • 【linux】:进程控制
  • 在recyclerview中使用其item布局的ViewBinding类需要注意的问题
  • 基于EB工具的TC3xx_MCAL配置开发05_ADC模块硬件Pwm触发Demo配置
  • Qt示例3:用Qt画一个温度计
  • 全卷积网络FCN
  • 【Linux】基础IO流(上)
  • 【C++】类和对象三大特性--多态
  • 【微前端】qiankun + vite + vue3
  • 模型部署之TorchScript
  • 修改linux网卡配置文件的文件名
  • 年轻人为啥热衷去寺庙?
  • Java Spring 框架
  • 基于OpenCV的人脸识别
  • 一文带你看懂电压放大器和功率放大器的区别
  • C++虚函数与多态
  • 蓝桥杯Web前端练习-----渐变色背景生成器
  • Python中的微型巨人-Flask
  • 密码学中的承诺
  • redis入门实战一、五种数据结构的基本操作(二)