NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//配置为0组。NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQChannel;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; // 指定抢占式优先级别0,可取0-1
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能中断
NVIC_Init(&NVIC_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel = SPI1_IRQChannel;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; // 指定抢占式优先级别1,可取0-1
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; // 指定从优先级别0,可取0-7
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQChannel;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; // 指定从优先级别1,
可取0-7
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure);
EXTI0_IRQChannel 抢占优先级 > SPI1_IRQChannel、USART1_IRQChannel,所以EXTI0_IRQChannel中断可以打断正在执行的SPI1_IRQChannel/USART1_IRQChannel中断,实现中断嵌套。
SPI1_IRQChannel、USART1_IRQChannel先占优先级相等,不能相互打断,即在执行SPI1_IRQChannel/ USART1_IRQChannel中断时USART1_IRQChannel/SPI1_IRQChannel中断无法打断。
同时产生SPI1_IRQChannel、USART1_IRQChannel中断时,要根据从优先级进行排队,SPI1_IRQChannel从优先级比较高,所以先执行SPI1_IRQChannel中断。