一、Nested vectored interrupt controller (NVIC嵌套矢量中断控制器)
用于为中断分组,从而分配抢占优先级和响应优先级
根据STM32的中断数量,分成5组
1、NVIC_PriorotyGroupConfig函数
Void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup)
设置优先级分组:先占优先级和从优先级
NVIC_PriorityGroup_0 先占优先级0位,从优先级4位
NVIC_PriorityGroup_1 先占优先级1位,从优先级3位
NVIC_PriorityGroup_2 先占优先级2位,从优先级2位
NVIC_PriorityGroup_3 先占优先级3位,从优先级1位
NVIC_PriorityGroup_4 先占优先级4位,从优先级0位
2、NVIC_Init()函数
Void NVIC(NVIC_InitTypeDef *NVIC_InitStruct)
根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器
参数NVIC_InitStruct:指向结构NVIC_InitTypeDef的指针,包含了中断的信息
NVIC_IRQChannel:中断源
NVIC_IRQChannelPreemptionPriority:抢占优先级
NVIC_IRQChannelSubPriority:响应优先级
NVIC_IRQChannelCmd:中断使能
例如:
NVIC_InitTypeDef NVIC_InitStructure;
//设置优先级分组
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
//选择外部中断线0中断
NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
//使能该通道
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
二、External interrupt/event controller(EXTI)
1、EXTI_Init函数
void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct);
根据EXTI_InitStruct初始化外设EXTI寄存器
参数EXTI_InitStruct:指向结构EXTI_InitTypeDef的指针,包含外设EXTI的配置信息
typedef struct
{
uint32_t EXTI_Line; //选择了待使能或者失能的外部线路。
EXTIMode_TypeDef EXTI_Mode; //设置被使能线路的模式
EXTITrigger_TypeDef EXTI_Trigger; //设置被使能线路的触发边沿
FunctionalState EXTI_LineCmd; //用来定义选中线路的新状态,它可以被设置成ENABLE或者DISABLE
}EXTI_InitTypeDef;
例如
EXTI_InitTypeDef EXTI_InitStructure;
EXTI_InitStructure.EXTI_Line = EXTI_Line0;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);