datasheet

STM32学习之:NVIC的初步理解

2018-10-21来源: eefocus关键字:STM32学  NVIC  初步理解

1  对NVIC的理解

      CM3支持硬件中断嵌套,分为抢占式优先级和亚优先级,使用规则主要有,抢占优先级高级别的可以打断低级别的,同一级别的抢占优先级同时发生时,亚当优先级高的先发生中断,若是相同,则按硬件排列顺序发生。若是有一个亚优先级正在执行中断,同一级别的其它亚优先级发生时,则先挂起,等此中断执行完再执行!

     从库函数中找到优先级分组模式:

#define NVIC_PriorityGroup_0         ((uint32_t)0x700) /* 0 bits for pre-emption priority

                                                          4 bits for subpriority */

#define NVIC_PriorityGroup_1         ((uint32_t)0x600) /* 1 bits for pre-emption priority

                                                          3 bits for subpriority */

#define NVIC_PriorityGroup_2         ((uint32_t)0x500) /* 2 bits for pre-emption priority

                                                          2 bits for subpriority */

#define NVIC_PriorityGroup_3         ((uint32_t)0x400) /* 3 bits for pre-emption priority

                                                          1 bits for subpriority */

#define NVIC_PriorityGroup_4         ((uint32_t)0x300) /* 4 bits for pre-emption priority

                                                          0 bits for subpriority */

从中可以看出第一组只有一个级别,16个亚优先级,我可以这样理解,若是分配成这个组里,不能发生嵌套中断,同时发生中断时,亚优先级高的先发生,若有中断执行时,必须等中断执行完才能执行下一个中断。最后一组正好相反,有15个级别,若是执行一个中断,可以最多嵌套15个中断执行一个中断。看下面的例子:

  NVIC_InitTypeDef    NVIC_InitStructure;  //定义中断初始化类型结构体变量

  

   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);   //配置优先级分组1 2个两个抢占优先级 8个亚优先级

  NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; //开口外部中断0

  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//配置0号抢占式优先级  

  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;//亚优先级配置为0号

  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能通道

  NVIC_Init(&NVIC_InitStructure);     //对外部中断0进行初始化配置


  NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn; //开口外部中断5到9

  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;//配置1号抢占式优先级  

  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;//亚优先级配置为1号

  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能通道

  NVIC_Init(&NVIC_InitStructure);     //对外部中断0进行初始化配置


  NVIC_InitStructure.NVIC_IRQChannel = ADC1_2_IRQn; //ADC1中断

  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;//配置1号抢占式优先级  

  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;//亚优先级配置为1号

  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能通道

  NVIC_Init(&NVIC_InitStructure);     //对外部中断0进行初始化配置


从上面的配置来看,外部中断0的优先级最高,可以打断ADC和外部5到9的中断,也就说可以嵌套发生,当ADC中断和外部5到9中断同时发生时,它们的抢占优先级别相同,亚优先级别也相同,因为ADC1硬件排在更靠前,则先发生ADC中断,若是两者任何一个中断正在执行,则等此中断执行完,再去执行另一个中断。


关键字:STM32学  NVIC  初步理解

编辑:什么鱼 引用地址:http://www.eeworld.com.cn/mcu/2018/ic-news102141959.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:STM32学习之:USART中断方式
下一篇:STM32学习之:事件标志组

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

STM32学习之定时器调试总结

通用定时器调试老是失败原因总结: 调试了两天终于找到错误根源: 错误程序: TIM3->DIER=1<<0;   //中断使能寄存器(TIMx_DIER)位0置位,允许更新中断 TIM3->DIER=1<<6;       //允许触发中断 正确程序: TIM3->DIER|=1<<0;         TIM3->DIER|=1<<6; 错因:执行TIM3->DIER|=1<<6;时TIM
发表于 2016-08-01

STM32 NVIC简化理解

)第3组:最高3位用于指定抢占式优先级(8级),最低1位用于指定副优先级(2级)第4组:所有4位用于指定抢占式优先级(16级)四、举例接下来就是指定中断源的优先级,下面以一个简单的例子说明如何指定中断源的抢占式优先级和副优先级:// 选择使用优先级分组第1组NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);// 使能EXTI0中断NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; // 指定抢占式优先级
发表于 2019-03-24

STM32关于优先级设定的理解 NVIC_SetPriority()

Systick模块初始化配置函数(Systick_config)中设定模块中断优先级的函数为:NVIC_SetPriority((SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1);参数SysTick_IRQn为systick基址,这个没什么好说的关键在参数 (1<<__NVIC_PRIO_BITS) - 1);这个参数即占先优先级值,其中—NVIC_PRIO_BITS是stm32.h中的宏定义,库函数默认为4,表示用4位表示占先优先级,因为m3内核只有4位用来表示占先优先级和响应优先级,那么响应优先级就剩下0位
发表于 2019-03-18

【STM32】NVIC中断优先级管理(中断向量表)

中,有标准的异常和中断向量表文件可以使用(startup_stm32f10x_hd.s),在其中标明了中断处理函数的名称,不能随意定义。而中断通道NVIC_IRQChannel(即IRQn_Type类型)是在stm32f10x.h文件中进行了宏定义。什么是NVIC?即嵌套向量中断控制器(Nested Vectored Interrupt Controller)。CM3的中有一个强大而方便的NVIC,它是属于Cortex内核的器件,中断向量表中60个中断都由它来处理。NVIC是Cortex-M3核心的一部分,关于它的资料不在《STM32的技术参考手册》中,应查阅ARM公司的《Cortex-M3技术参考手册》。Cortex-M3
发表于 2019-03-13
【STM32】NVIC中断优先级管理(中断向量表)

STM32中断及NVIC概述

参考资料《STM32F4xx 中文参考手册》第十章-中断和事件、《 ARM Cortex™-M4F 技术参考手册》-4.3 章节:NVIC 和 4.4章节:SCB—4.4.5的 AIRCR。对51单片机有一定了解的都知道51单片机有5个中断源,2个优先级,通过对IP这个寄存器赋值来进行中断优先级的处理而STM32的中断非常强大,每个外设都可以产生中断,那么STM32如何进行中断优先级的分配呢,这时就用到了NVIC(嵌套向量中断控制器), 支持为数众多的系统异常和外部中断。下表即为STM32F42系列的中断向量表(了解即可),即中断类型灰色部分即为内核的系统异常,灰色以外的其他部分即为片上所有外设可以产生的中断。priority值
发表于 2019-02-18
STM32中断及NVIC概述

【stm32f407】NVIC

NVIC称之为“嵌套向量中断控制器:Nested Vectored Interrupt Controller (NVIC)“。CM4内核支持256个中断,其中包含了16个内核中断和240个外部中断,并且具有256级的可编程中断设置。但STM32F4并没有使用CM4内核的全部东西,而是只用了它的一部分STM32F40xx/STM32F41xx总共有92个中断,STM32F42xx/STM32F43xx则总共有96个中断,以下仅以STM32F40xx/41xx为例讲解。STM32F40xx/STM32F41xx的92个中断里面,包括10个内核中断和82个可屏蔽中断,具有16级可编程的中断优先级,而我们常用的就是这82个可屏蔽中断
发表于 2019-02-12
【stm32f407】NVIC

小广播

何立民专栏

单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved