如图,一开始以为是设置好抢占优先级后,响应优先级设置不了(下拉只有0一个选项),查资料才知道中断优先级是要分组的。
STM32中断分组和优先级
优先级分组 | 抢占优先级 | 响应优先级 | 描述 |
NVIC_PriorityGroup_0 | 0 | 0~15取值 | 高4位全部是响应优先级,无抢占优先级 |
NVIC_PriorityGroup_1 | 0~1取值 | 0~7取值 | 高4位全部是响应优先级,无抢占优先级 |
NVIC_PriorityGroup_2 | 0~3取值 | 0~3取值 | 抢占优先级为2位,响应优先级为2位 |
NVIC_PriorityGroup_3 | 0~7取值 | 0~1取值 | 抢占优先级为2位,响应优先级为2位 |
NVIC_PriorityGroup_4 | 0~15取值 | 0 | 抢占优先级为2位,响应优先级为2位 |
- 抢占优先级不同,会涉及到中断嵌套,抢占优先级高的会优先抢占优先级低的,优先得到执行。(注:优先级数字越小,优先级越高)
- 抢占优先级相同,不涉及到中断嵌套,响应优先级不同,响应优先级高的先响应。(例如:两个中断同时响应,这里就会先执行响应优先级高的那个中断)(注:优先级数字越小,优先级越高)
- 抢占优先级和响应优先级都相同,则比较它们的硬件中断编号,中断编号越小,优先级越高。(硬件中断编号从中断向量表当中查看)