STM32F1 中断管理

背景

  1. STM32中每个中断都可以独立设置抢占优先级响应优先级
  2. 优先设置的级数值越小,优先级越高
  3. 中断优先级控制的寄存器组,在mdk中的定义是bit IP[240],而F103有60个中断,这意味着每个中断只能使用4bit来表示自己的抢占优先级和响应优先级
  4. 灵活考虑,可以通过软件配置来设定4bit中,几个bit表示抢占优先级,几个bit表示响应优先级。

中断分组

中断分组,按我的理解就是中断寄存器控制位的分配方式,一共有0~4,五种:

  • 组0,0位用于抢占优先级,4位用于响应优先级
  • 组1,1位用于抢占优先级,3位用于响应优先级
  • 组2,2位用于抢占优先级,2位用于响应优先级
  • 组3,3位用于抢占优先级,1位用于响应优先级
  • 组4,4位用于抢占优先级,0位用于响应优先级

何为抢占优先级和响应优先级

抢占,是指打断其他中断的属性,即因为具有这个属性会出现嵌套中断(在执行中断
服务函数A的过程中被抢占优先级更高的中断B打断,执行完中断服务函数B 再继续执行中断服务函数A),而响应属性则应用在抢占属性相同的情况下,当两个中断向量的抢占优先级相同时,如果两个中断同时到达, 则先处理响应优先级高的中断。

使用HAL库函数来配置中断分组

调用void HAL_NVIC_SetPriorityGrouping(uint32_t PriorityGroup)即可。
其中PriorityGroup必须是NVIC_PRIORITYGROUP_x,x可以是0~4

对每个中断定义其抢占优先级和响应优先级

// 参数依次是:中断号,抢占优先级,响应优先级
void HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority);
// 可以用于使能/失能中断
void HAL_NVIC_EnableIRQ(IRQn_Type IRQn);
void HAL_NVIC_DisableIRQ(IRQn_Type IRQn);

你可能感兴趣的:(STM32F1 中断管理)