中断优先级分组配置
void HAL_NVIC_SetPriorityGrouping(uint32_t PriorityGroup)
//配置函数
#define IS_NVIC_PRIORITY_GROUP(GROUP) (((GROUP) == NVIC_PRIORITYGROUP_0) || \
((GROUP) == NVIC_PRIORITYGROUP_1) || \
((GROUP) == NVIC_PRIORITYGROUP_2) || \
((GROUP) == NVIC_PRIORITYGROUP_3) || \
((GROUP) == NVIC_PRIORITYGROUP_4))
//分组
HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_2)
//使用HAL_NVIC_SetPriorityGrouping()
设置对应的抢占优先级和响应优先级
void HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority)
//配置函数
HAL_NVIC_EnableIRQ(USART1_IRQn);
//使能中断通道USART1_IRQn
HAL_NVIC_SetPriority(USART1_IRQn,3,3);
//配置USART1_IRQn中断
//抢先优先级3
//响应优先级3
注意:
高优先级的抢占优先级是可以打断正在进行的低抢占优先级中断的。
抢占优先级相同的中断,高响应优先级不可以打断低响应优先级的中断。
抢占优先级相同的中断,当两个中断同时发生的情况下,哪个响应优先级高,哪个先执行。
如果两个中断的抢占优先级和响应优先级都是一样的话,则看哪个中断先发生就先执行;
假定设置中断优先级组为2,然后设置
中断3(RTC中断)的抢占优先级为2,响应优先级为1。
中断6(外部中断0)的抢占优先级为3,响应优先级为0
中断7(外部中断1)的抢占优先级为2,响应优先级为0。
那么这3个中断的优先级顺序为:中断7>中断3>中断6