在HAL库中NVIC中断配置
中断优先级分组配置
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
