在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
发布了50 篇原创文章 · 获赞 3 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_41865104/article/details/103780289