一、中断优先级分组
抢占优先级和子优先级,它们的级数(数量),由 优先级分组 决定 (也就是AIRCR寄存器的 Bits[7:0])。STM32只使用其中Bits[7:4],也就是一部分。
对应在STM32CubeMX配置就是:
STM32CubeMX生成对应的代码: HAL_Init(void) ->HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);
STM32F103不使用PRIGROUP来命名分组,而采用NVIC_PRIORITYGROUP_x的方式命名,
即NVIC_PRIORITYGROUP_0对应PRIGROUP为7,在“stm32f1xx_hal_cortex.h”有相关定义。
使用“HAL_NVIC_SetPriority()”函数设置不同中断的抢占优先级级数和子优先级级数:
MX_NVIC_Init(void)
-> HAL_NVIC_SetPriority(EXTI0_IRQn, 2, 0);
HAL_NVIC_EnableIRQ(EXTI0_IRQn);
嵌套中断:
STM32F1中断的优先级:
3个固定的优先级,都是负值,不能改变
四个可编程优先级,用两个bit位表示,00,01,10,11
优先级越小优先级越高
不同优先级的中断同时发生,优先处理优先级编号较小的那个 同样优先级的中断同时发生,中断向量号较小的那个优先响应。
外部中断控制器EXTI
内容概要:
外部中断控制器EXTI
系统配置控制器SYSCFG
外部中断/事件框图
外部中断控制器EXTI:
在 STM32F05x 中,共有最多 28 中断 / 事件线可用:
GPIO 口连接到 16 个外部中断 / 事件线