×
单片机 > 单片机程序设计 > 详情

STM32 NVIC基本理解

发布时间:2020-05-18 发布时间:
|

STM32F1 NVIC中断管理

NVIC两个属性:抢占属性、响应属性(编号越小,优先级越高)


NVIC_IRQChannelSubPriority 参数配置例子:三个中断向量A、B、C


中断向量名称 抢占优先级 响应优先级

A 0 0

B 1 0

C 1 1

此处中断A可以打断中断B,但B不能打断C。 

两个要点: 

1、若两个中断的抢占优先级和响应优先级相同,则哪一个先发生就先执行。 

2、不同的抢占优先级,高抢占优先级可以打断正在进行低抢占优先级 

相同的抢占优先级,高响应优先级不可以打断正在进行低响应优先级


NVIC的优先组


0-1总共五个分配方式:


第0 组: 所有4 位用来配置响应优先级。即16 种中断向量具有都不相同的响应优先级。 

第1 组:最高1 位用来配置抢占优先级,低3 位用来配置响应优先级。表示有2 种级别的抢占优先级(0 级,1 级),有8 种响应优先级,即在16 种中断向量之中,有8 种中断,其抢占优先级都为0 级,而它们的响应优先级分别为0~7,其余8 种中断向量的抢占优先级则都为1 级,响应优先级别分别为0~7。 

第2 组:2 位用来配置抢占优先级,2 位用来配置响应优先级。即4 种抢占优先级,4 种响应优先级。 

第3 组:高3 位用来配置抢占优先级,最低1 位用来配置响应优先级。即有8 种抢占优先级,2 种响应2 优先级。 

第4 组:所有4 位用来配置抢占优先级,即NVIC 配置的16 种中断向量都是只有抢占属性,没有响应属性。


示例代码:


    //配置NVIC:设置NVIC中断分组2:2位抢占优先级,2位响应优先级

    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); 


    //定义NVIC中断结构体

    NVIC_InitTypeDef NVIC_InitStructure;

    //使能XXXXX_IRQn所在的中断通道

    NVIC_InitStructure.NVIC_IRQChannel = XXXXX_IRQn;            

    //设置抢占优先级

    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;

    //设置响应优先级

    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x03;   

    //使能中断通道

    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; 

    //初始化中断结构体          

    NVIC_Init(&NVIC_InitStructure); 


STM32F4中断管理与此次类似,这里只是介绍基本配置和优先级高低问题




『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
如何为单片机选择合适的负载电容