1.中断
stm32的芯片通常有90多个以上的中断,具有16级可编程的中断优先级。
2.中断管理方法
1.首先对STM32中断进行分组,
有组0~4。同时对每一个中断设置一个抢占优先级和一个响应优先级值。
分组配置是在寄存器SCB->AIRCR中配置:
SCB->AIRCR为111,就是0位抢占,4位响应
2.抢占优先级与响应优先级的区别
1.高抢占优先的中断可以打断正在进行的低抢让优先级的中断。
2.在抢占优先级相同的时候,响应优先级高的可以打断响应优先级的任务。
3.抢占优先和响应优先级相同的情况下,根据谁先执行。
中断数字越小,优先级更高
案例
中断3(RTC)的抢占优先级为2,响应优先级为1
中断6(外部中断0)的抢占优先级为3,响应优先级为0
中断7(外部中断1)的抢占优先级为2,响应优先级为0
那么这三个中断的优先顺序为 中断7>中断3>中断6
注意
优先级通常只设置一次,通常在程序执行中不能改变,要不然容易引起系统混乱
3.中断优先级分组函数
1.设置分组
HAL_NVIC_SetPriorityGrouping(uint32_t PriorityGroup)
uint32_t PriorityGroup为分组
2.设置单个中断的响应优先级和抢占优先级
HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority)
IRQn_Type IRQn为中断口
uint32_t PreemptPriority为抢占优先级
uint32_t SubPriority为响应优先级