NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3; //外部中断 NVIC_InitStructure.NVIC_IRQChannelSubPriority=3;
时间: 2024-04-17 08:02:08 浏览: 98
根据你提供的代码片段,这部分代码是用于配置外部中断的中断优先级。根据代码中的设置,`NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority`和`NVIC_InitStructure.NVIC_IRQChannelSubPriority`都被设置为3。
在ARM Cortex-M系列微控制器中,中断优先级通常由两个部分组成:抢占优先级(Preemption Priority)和子优先级(Subpriority)。
抢占优先级用于确定中断处理的优先级顺序。具有更高抢占优先级的中断可以打断正在执行的较低优先级中断。同一抢占优先级的中断之间会按照子优先级来确定执行顺序。
根据你的代码,抢占优先级和子优先级都被设置为3。这意味着该外部中断的优先级为3/3(抢占优先级/子优先级),在抢占优先级相同的情况下,子优先级为3的中断会在子优先级为0、1、2的中断之后执行。
请注意,具体的中断优先级配置方法可能因芯片型号和使用的编程环境而有所不同。在配置中断优先级时,请参考芯片的手册或官方文档,以确保正确的配置和理解中断优先级的工作方式。
相关问题
void EXTI_Config(void) { EXTI_InitTypeDef EXTI_InitStructure; EXTI_DeInit(); //EXTI初始化 NVIC_DeInit(); //中断优先级初始化 NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); //抢占优先级:0/1 从优先级0-7 /* Enable the USART3 Interrupt */ NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQChannel; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQChannel; //中断通道 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //强占优先级 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //次优先级 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //通道中断使能 NVIC_Init(&NVIC_InitStructure); //初始化中断 GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource12); //PC12设置到EXTI12上 EXTI_DeInit(); EXTI_InitStructure.EXTI_Line = EXTI_Line12; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); 解释一下这段代码
这段代码主要是用来配置单片机的外部中断(EXTI)和中断向量表(NVIC)。
首先,通过调用`EXTI_DeInit()`和`NVIC_DeInit()`函数进行外部中断和中断向量表的初始化。
然后,使用`NVIC_SetVectorTable()`函数设置中断向量表的位置为Flash,并设置偏移地址为0x0。
接下来,通过调用`NVIC_PriorityGroupConfig()`函数设置中断优先级分组,这里设置为分组1,抢占优先级为0/1,从优先级0-7。
然后,使用`NVIC_Init()`函数初始化USART3的中断,设置中断通道为USART3,并设置抢占优先级为1,次优先级为0,并使能该中断通道。
接着,使用`GPIO_EXTILineConfig()`函数将PC12引脚配置到EXTI12上,表示PC12引脚触发的中断将会与EXTI_Line12关联。
再次调用`EXTI_DeInit()`函数进行外部中断的初始化。
最后,使用`EXTI_Init()`函数初始化EXTI_InitStructure结构体,并设置外部中断线为EXTI_Line12,模式为中断模式,触发方式为下降沿触发,使能该外部中断线。
这段代码的作用是配置USART3和PC12引脚的外部中断,并设置相应的中断优先级和触发方式。具体的外部中断处理和中断服务程序需要根据实际需求进行编写。
#include <nvic.h> void NVIC_Configuration(void) { NVIC_InitTypeDef NVIC_InitStructure; /* Configure the NVIC Preemption Priority Bits */ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); /* Enable the USARTy Interrupt */ NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); }
这是一个配置STM32F4微控制器中NVIC(Nested Vectored Interrupt Controller)的函数。在STM32F4中,NVIC用于管理中断,并且可以配置中断优先级。在这个函数中,首先通过调用NVIC_PriorityGroupConfig函数配置NVIC的优先级分组,然后通过配置NVIC_InitStructure结构体中的各个参数来初始化NVIC。在这个函数中,配置了USART1_IRQn和TIM3_IRQn两个中断的优先级和使能状态。USART1_IRQn用于USART1串口通信的中断处理函数,而TIM3_IRQn用于定时器3的中断处理函数。配置NVIC后,就可以启用这两个中断,并且可以在中断处理函数中进行相应的操作。
阅读全文