STM32 NVIC中断优先级管理通过结构图快速理解
📑抢占优先级和响应优先级基本常识
- 🌿抢占优先级的级别高于响应优先级。
- 🌿抢占优先级数值编号越小,所代表的优先级就越高;同理,响应优先级也是如此。
- 🔖HAL优先组函数:
/*** @brief Sets the priority grouping field (preemption priority and subpriority)* using the required unlock sequence.* @param PriorityGroup: The priority grouping bits length. * This parameter can be one of the following values:* @arg NVIC_PRIORITYGROUP_0: 0 bits for preemption priority* 4 bits for subpriority* @arg NVIC_PRIORITYGROUP_1: 1 bits for preemption priority* 3 bits for subpriority* @arg NVIC_PRIORITYGROUP_2: 2 bits for preemption priority* 2 bits for subpriority* @arg NVIC_PRIORITYGROUP_3: 3 bits for preemption priority* 1 bits for subpriority* @arg NVIC_PRIORITYGROUP_4: 4 bits for preemption priority* 0 bits for subpriority* @note When the NVIC_PriorityGroup_0 is selected, IRQ preemption is no more possible. * The pending IRQ priority will be managed only by the subpriority. * @retval None*/
void HAL_NVIC_SetPriorityGrouping(uint32_t PriorityGroup)
{/* Check the parameters */assert_param(IS_NVIC_PRIORITY_GROUP(PriorityGroup));/* Set the PRIGROUP[10:8] bits according to the PriorityGroup parameter value */NVIC_SetPriorityGrouping(PriorityGroup);
}
- 🌿对于STM32f1系列,可分配有4组:
-
- 🍁NVIC_PRIORITYGROUP_0
- 🍁NVIC_PRIORITYGROUP_0
HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_0);
HAL_NVIC_SetPriority(TIM5_IRQn, 0, 15);//中断号,抢占优先级(0),子优先级(0-15)
-
- 🍁NVIC_PRIORITYGROUP_1
- 🍁NVIC_PRIORITYGROUP_1
HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_1);
HAL_NVIC_SetPriority(TIM5_IRQn, 1, 7);//中断号,抢占优先级(0-1),子优先级(0-7)
-
- 🍁NVIC_PRIORITYGROUP_2
HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_2);
HAL_NVIC_SetPriority(TIM5_IRQn, 3, 3);//中断号,抢占优先级(0-3),子优先级(0-3)
-
- 🍁NVIC_PRIORITYGROUP_3
HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_3);
HAL_NVIC_SetPriority(TIM5_IRQn, 7, 1);//中断号,抢占优先级(0-7),子优先级(0-1)
-
- 🍁NVIC_PRIORITYGROUP_4
- 🍁NVIC_PRIORITYGROUP_4
HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);
HAL_NVIC_SetPriority(TIM5_IRQn, 15, 0);//中断号,抢占优先级(0-15),子优先级(0)