STM32 为了适应不同的优先级组合,设置了 GROUP 的概念,组是一个大的框架,在组下分别分配了占先优先级与副优先级。每一个中断都有一个专门的寄存器(Interrupt Priority Registers)来描述该中断的占先式优先级及副优先级。在这个寄存器中STM32 使用4个二进制位描述优先级(Cortex-M3 定义了8位,但 STM32只使用了4位)。--转自《稀里糊涂学STM32》第三讲《事出有因》
1.Systick
一般NVIC优先级的设置都是通过NVIC_InitTypeDef中的NVIC_IRQChannelPreemptionPriority和NVIC_IRQChannelSubPriority,但Systick是通过CM3内核的函数NVIC_SetPriority()设置,这是因为Systick的中断号IRQn为-1,这两种设置方式存在如下对应关系
- NVIC_SetPriority(SysTick_IRQn, n);
- n=0x00~0x03 设置Systick为抢占优先级0
- n=0x04~0x07 设置Systick为抢占优先级1
- n=0x08~0x0B 设置Systick为抢占优先级2
- n=0x0C~0x0F 设置Systick为抢占优先级3
具体请参考http://blog.csdn.net/sunjiajiang/article/details/7741715
2.正确设置一个中断,包括peripheral的中断使能,对应NVIC的配置,中断入口函数。同一peripheral的多个中断源往往对应同一个中断处理函数ISR,这时需要在ISR根据中断标志位进行判断。