编写NVIC中断初始化程序实现USATR2的抢占优先级为3,响应优先级为3
时间: 2024-10-10 19:07:05 浏览: 16
NVIC (Nested Vectored Interrupt Controller) 是ARM处理器中用于管理中断请求的硬件结构,它负责将CPU从用户模式切换到内核模式,并调度相应的中断服务 Routine (ISR)。要设置USART2的抢占优先级(Priority Grouping Level)为3、响应优先级也为3,你需要按照以下步骤编写中断初始化程序:
首先,在C语言中,抢占优先级和响应优先级通常通过NVIC_InitStructure结构体来配置,这个结构体通常包含`IRQn_Type`(中断号)、`PreemptionPriority`(抢占优先级)和`SubPriority`(子优先级)。
```c
// 导入需要的头文件
#include "NVIC.h"
#include "stm32f1xx_hal.h"
// USART2中断编号
#define USART2_IRQn NVIC_IRQ通道对应的宏,例如对于STM32F103系列可能是GPIOA_IRQn
// 初始化NVIC结构体
NVIC_InitTypeDef NVIC_InitStructure;
// 设置抢占优先级和响应优先级(这里都为3)
NVIC_InitStructure.PreemptionPriority = 3;
NVIC_InitStructure.SubPriority = 3; // 这里也是3,因为抢占优先级决定了响应优先级范围
// 确定NVIC_InitStructure IRQn对应的中断组
NVIC_InitStructure.IrqChannel = USART2_IRQn;
// 将该中断设置为向量表中断( vectored interrupt)
NVIC_InitStructure.InterruptType = NVIC_IRQ_TYPE_VECTORED;
// 开启中断
NVIC_InitStructure.ActiveState = ENABLE;
// 配置NVIC
NVIC_InitStructure.IsPreemptionPriorityValid = DISABLE; // 如果抢占优先级有效,则需设置为TRUE
NVIC_InitStructure.IsSubPriorityValid = DISABLE; // 同理,如果子优先级有效则设为TRUE
// 写入NVIC中断寄存器
NVIC_Init(&NVIC_InitStructure);
```
完成以上配置后,USART2的中断就会按照指定的抢占优先级3和响应优先级3进行处理。