【STM32】NVIC嵌套中断向量控制器与外部中断

两种优先级

        抢占优先级PreemptPriority中断服务函数正在执行时,抢占优先级高的可以打断抢占优先级低的,实现中断的嵌套,相当于51的“高优先级”

        响应优先级(子优先级)SubPriority:抢占优先级相同的情况下,当两个中断同时被触发时,为避免中断的阻塞,高响应优先级的中断源会被优先触发,但高响应优先级不能打断低相应优先级,相当于51的“自然优先级”

        特性:数字越小优先级越高,其中Reset,Hard fault,NMI优先级为负数且不可变,高于普通的中断优先级

优先级组的配置

        简述:每个可屏蔽中断都有对应的优先级寄存器IP,例如F429有91个可屏蔽中断,对应IP[0]~IP[90],对于M3/4/7的内核,IP有八位,可设置2^8 = 256级优先级,但ST只用了高四位[7:4],可以实现2^4 = 16级优先级,由于存在两类优先级,因此需要将这四位分给两个优先级用于配置优先级别,我们将不同的分分配方式成为优先级分组(NVIC_PriorityGroup),由寄存器SCB->AIRCR的10~8bit控制

            【STM32】NVIC嵌套中断向量控制器与外部中断

        API:HAL_NVIC_SetPriorityGrouping(NVIC_PriorityGroup_n)

                 以上函数出现在HAL_Init() 中,用于对优先级分组进行设定,n = 0~4

        例如:HAL_NVIC_SetPriorityGrouping(NVIC_PriorityGroup_2)//采用优先级分组2

优先级的设定

        API:void HAL_NVIC_SetPriority(IRQn_Type IRQn,//中断号,此处由枚举IRQn_Type映射

                                                                 uint32_t PreemptPriority,//抢占优先级

                                                                 uint32_t SubPriority)//响应优先级(子优先级)

                 例如:HAL_NVIC_SetPriority(TIM3_IRQn,1,3);

 

                  void HAL_NVIC_EnableIRQ(IRQn_Tpye IRQn) //中断使能,同样由Disable,不赘述

                 例如:HAL_NVIC_EnableIRQ(TIM3_IRQn);

上一篇:问题


下一篇:CC2530开发试题(五)