STM32 NVIC 中断优先级管理
来源:互联网 发布:淘宝客服售后质量话术 编辑:程序博客网 时间:2024/05/17 23:44
这里以STM32F4系列为例。
先简单介绍下STM32F4的中断分组,STM32F4将中断分为5个组,组0-4.该分组的设置是有SCB->AIRCR寄存器的bit 10~8来定义的。具体分配关系如下表
假设说组设置为2,那么此时每个中断的中断优先寄存器的高四位中的最高两位是抢占优先级,低两位是响应优先级。在每个中断中,你可以设置抢占优先级为0-4,响应优先级为0-4。需要注意的是,抢占优先级的级别高于响应优先级,而且数值越小代表的优先级越高。另外,在优先级相同的情况下,则遵循先发生先执行的规则。
举个例子,中断1的抢占优先级为2,响应优先级为1,中断2的抢占优先级为2,响应优先级为0,中断3的抢占优先级为3,响应优先级为0,则3个中断的优先级顺序为
2〉1〉3。
这里还有一个注意点,高抢占级别的中断时可以打断低抢占级别的中断的,但在相同抢占优先的情况下,高响应级别的中断是不能打断低响应级别的中断。即:中断1,2可以打断中断3,但是中断1,2不能相互打断。
接下来我们介绍如何使用库函数实现以上中断分组设置以及中断优先级管理。
首先是中断优先级分组函数
void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup);
这个函数的作用就是通过设置SCB-〉AIRCR寄存器来设置中断优先级分组。例如:
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct)
这里,NVIC_InitTypeDef是一个结构体,其定义如下:
typedef struct
{
uint8_t NVIC_IRQChannel;
uint8_t NVIC_IRQChannelPreemptionPriority;
uint8_t NVIC_IRQChannelSubPriority;
FunctionalState NVIC_IRQChannelCmd;
} NVIC_InitTypeDef;
NVIC_IRQChannel:定义初始化的是哪个中断,这个我们可以在 stm32f10x.h 中找到每个中断对应的名字。例如 USART1_IRQn。
NVIC_IRQChannelPreemptionPriority:定义这个中断的抢占优先级别。
NVIC_IRQChannelSubPriority:定义这个中断的子优先级别,也叫响应优先级。
NVIC_IRQChannelCmd:该中断通道是否使能。
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;//串口1 中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1 ;//抢占优先级为 1
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;//响应优先级位 2
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能
NVIC_Init(&NVIC_InitStructure); //根据上面指定的参数初始化NVIC 寄存器
- STM32 NVIC 中断优先级管理
- STM32 NVIC 中断优先级管理
- STM32 NVIC中断优先级管理
- STM32 NVIC 中断优先级管理
- STM32 NVIC 中断优先级管理
- NVIC中断优先级管理
- NVIC中断优先级管理
- NVIC中断优先级管理
- stm32之中断优先级NVIC
- stm32学习笔记 F1系列中断优先级管理NVIC
- STM32 对于NVIC中断优先级的设置
- STM32系列第6篇--NVIC中断优先级分组
- 中断管理控制器NVIC与stm32中断使用
- STM32中断优先级分组管理
- stm32 NVIC中断管理实现[直接操作寄存器]
- stm32 NVIC中断管理实现[直接操作寄存器]
- stm32 NVIC中断管理实现[直接操作寄存器]
- STM32 NVIC的优先级概念
- 一个web项目web.xml的配置中<context-param>配置作用
- 下载jenkins比较快的网站
- 封装一个UIAlertController
- Git命令大全
- 【一步步学OpenGL 23】 -《阴影贴图1》
- STM32 NVIC 中断优先级管理
- 业务流程建模标注(BPMN)详细介绍
- minicom
- Tomcat daemon 脚本管理Tomcat
- iOS 设备的CPU架构(持续更新)
- java中String、StringBuffer、StringBuilder总结
- 【luogu】 P1880 石子合并
- ElasticSearch学习27_Elasticsearch启动时 unable to install syscall filter 问题说明
- [RK3288][Android6.0] 调试笔记 --- 伪电池驱动添加