STM32F4——NVIC中断优先级及外部中断

合集下载

STM32中断NVIC思维导图

STM32中断NVIC思维导图

STM32103系列中断NVIC 中断构成10个系统异常(系统中断)60个外部中断NVIC寄存器NVIC简介全称:嵌套向量中断控制器来源:cortex-M3 内核里的NVIC减去不需要的部分构成STM32的NVIC寄存器1.ISER中断使能寄存器2.ICER中断清除寄存器(也就是失能中断)3.ISPR中断使能悬起寄存器4.ICPR中断清除悬起寄存器5.IABR中断有效位寄存器6.IP中断优先级寄存器7.STIR软件触发中断寄存器黄色部分是常用的中断优先级优先级的定义优先级设定寄存器:NVIC->IPRx复位,NMI 和硬 fault是特殊的、不可设置的、优先级最高的,无论什么时候出现都会抢占最高级别作用:用来配置外部中断优先级寄存器说明寄存器宽度:8bit(如图所示:STM32系列有效的只有4bit)支持16级优先级别:0~15数值意义:数值越小,优先级就越高优先级分组优先级分组:SCB->AIRCR:PRIGROUP[10:8]优先级分组定义用于表达优先级的4bit,如果有中断发生,抢占式优先级高的先执行,如果抢占式优先级相同,就比较子优先级。

如果2者都相同,那就比较它们的硬件编号(编号小的优先级高)优先级分组的来源优先级分组抢占式优先级子优先级固件库中断配置需要用到的定义所在文件misc.c、misc.h、stm32f10x.h、st32f10x_it.c中断配置步骤使能外设某个中断11.开启比如定时器中断、串口中断,外部中断等相应外设中断的寄存器位2.使能NVIC寄存器中的使能寄存器设置中断优先级分组2对应的固件库函数:NVIC_PriorityGroupConfig(),在misc.c的文件中配置NVIC寄存器3初始化NVIC_InitTypeDef结构体将初始化后的NVIC_InitTypeDef结构体放入NVIC_Init()中,在misc.c的文件中4编写中断服务函数51.中断服务函数名称都在startup_stm32f10x_hd.s的汇编文件中已经设置好了2.在st32f10x_it.c文件中编写。

stm32 外部中断详细讲解 (转)

stm32 外部中断详细讲解 (转)
STM32可支持68个中断通道,已经固定分配给相应的外部设备,每个中断通道都具备自己的中断优先级控制字节PRI_n(8位,但是STM32中只使用4位,高4位有效),每4个通道的8位中断优先级控制字构成一个32位的优先级寄存器。68个通道的优先级控制字至少构成17个32位的优先级寄存器。
4bit的中断优先级可以分成2组,从高位看,前面定义的是抢占式优先级,后面是响应优先级。按照这种分组,4bit一共可以分成5组
}
设置相应的时钟所需要的RCC函数在stm32f10x_rcc.c中,所以要在工程中添加此文件。
2. 设置好相应的中断
设置相应的中断实际上就是设置NVIC,在STM32的固件库中有一个结构体NVIC_InitTypeDef,里面有相应的标志位设置,然后再用NVIC_Init()函数进行初始化。详细代码如下:
第0组:所有4bit用于指定响应优先级;
第1组:最高1位用于指定抢占式优先级,后面3位用于指定响应优先级;
第2组:最高2位用于指定抢占式优先级,后面2位用于指定响应优先级;
第3组:最高3位用于指定抢占式优先级,后面1位用于指定响应优先级;
第4组:所有4位用于指定抢占式优先级。
所谓抢占式优先级和响应优先级,他们之间的关系是:具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断嵌套。
NVIC_Init(&NVIC_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQChannel; //选择中断通道3
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; //抢占式中断优先级设置为1

nvic中断控制原理

nvic中断控制原理

nvic中断控制原理
NVIC,全称为嵌套向量中断控制器,是ARMCortex-M微控制器中的核心组件之一。

它的工作原理如下:
1.中断优先级:每个中断都有一个固定的优先级。

优先级高的中断在发生时可以立即打断正在执行的指令序列。

ARMCortex-M微控制器支持动态优先级,可以在运行时改变中断的优先级。

2.中断向量表:NVIC使用一个特殊的存储区域来保存中断向量表(InterruptVectorTable)。

中断向量表是一个数组,其中每个元素都是一个指向中断处理程序的地址。

当中断发生时,NVIC将比较新中断与当前中断的优先级,如果新中断优先级高,则立即处理新中断。

3.中断屏蔽:NVIC具有可编程的中断屏蔽寄存器,用于控制哪些中断被允许或禁止。

通过设置这些寄存器的值,可以控制哪些中断信号可以触发中断事件。

4.自动保存和恢复处理器状态:在ISR(中断服务程序)结束时,NVIC将从栈中恢复相关寄存器的值,进行正常操作,因此花费少量且确定的时间处理中断请求。

总之,NVIC通过优先级管理、向量表、屏蔽寄存器和自动保存恢复处理器状态等功能,实现了对微控制器中断的全面控制和管理。

STM32中断优先级彻底讲解

STM32中断优先级彻底讲解

STM32中断优先级彻底讲解stm32目前支持的中断共为84个(16个内核+68个外部),16级可编程中断优先级的设置(仅使用中断优先级设置8bit中的高4位)和16个抢占优先级(因为抢占优先级最多可以有四位数)。

二:优先级推论stm32(cortex-m3)中有两个优先级的概念——抢占式优先级和响应优先级,有人把响应优先级称作'亚优先级'或'副优先级',每个中断源都需要被指定这两种优先级。

具备低抢占市场式优先级的中断可以在具备高抢占市场式优先级的中断处理过程中被积极响应,即为中断嵌套,或者说低抢占市场式优先级的中断可以嵌套高抢占市场式优先级的中断。

当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。

如果这两个中断同时到达,则中断控制器根据他们的响应优先级高低来决定先处理哪一个;如果他们的抢占式优先级和响应优先级都相等,则根据他们在中断表中的排位顺序同意先处置哪一个。

三:优先级分组既然每个中断源都须要被选定这两种优先级,就须要存有适当的寄存器位记录每个中断的优先级;在cortex-m3中定义了8个比特位用作设置中断源的优先级,这8个比特位在nvic应用领域中断与登位掌控递丛器(aircr)的中断优先级分组域中,可以存有8种分配方式,如下:所有8位用于指定响应优先级最低1十一位用作选定抢占市场式优先级,最高7十一位用作选定积极响应优先级最低2十一位用作选定抢占市场式优先级,最高6十一位用作选定积极响应优先级最低3十一位用作选定抢占市场式优先级,最高5十一位用作选定积极响应优先级最低4十一位用作选定抢占市场式优先级,最高4十一位用作选定积极响应优先级最低5十一位用作选定抢占市场式优先级,最高3十一位用作选定积极响应优先级最低6十一位用作选定抢占市场式优先级,最高2十一位用作选定积极响应优先级最低7十一位用作选定抢占市场式优先级,最高1十一位用作选定积极响应优先级这就是优先级分组的概念。

STM32F4 第9讲 NVIC中断优先级管理-M4

STM32F4 第9讲 NVIC中断优先级管理-M4
void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct);
✓ 2. 中断优先级设置
中断使能寄存器组:ISER[8]
作用:用来使能中断
32位寄存器,每个位控制一个中断的使能。STM32F40x只 有82个可屏蔽中断,所以只使用了其中的ISER[0]~ISER[2]。
✓ 3. NVIC总结
中断优先级设置步骤
① 系统运行后先设置中断优先级分组。调用函数:
void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup);
整个系统执行过程中,只设置一次中断分组。
②针对每个中断,设置对应的抢占优先级和响应优先级:
void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct);
__IO uint32_t ICPR[8]; uint32_t RESERVED3[24];
__IO uint32_t IABR[8]; uint32_t RESERVED4[56];
__IO uint8_t IP[240]; uint32_t RESERVED5[644];
__O uint32_t STIR; } NVIC_Type;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
✓ 2. 中断优先级设置
分组设置好之后,怎么设置单个中断的抢占 优先级和响应优先级?
✓ 2. 中断优先级设置
中断设置相关寄存器
__IO uint8_t IP[240]; //中断优先级控制的寄存器组
__IO uint32_t ISER[8]; //中断使能寄存器组 __IO uint32_t ICER[8]; //中断失能寄存器组 __IO uint32_t ISPR[8]; //中断挂起寄存器组 __IO uint32_t ICPR[8]; //中断解挂寄存器组 __IO uint32_t IABR[8]; //中断激活标志位寄存器组

STM32中断优先级彻底讲解

STM32中断优先级彻底讲解

STM32中断优先级彻底讲解一:综述STM32 目前支持的中断共为 84 个(16 个内核+68 个外部), 16 级可编程中断优先级的设置(仅使用中断优先级设置 8bit 中的高 4 位)和16个抢占优先级(因为抢占优先级最多可以有四位数)。

二:优先级判断STM32(Cortex-M3)中有两个优先级的概念——抢占式优先级和响应优先级,有人把响应优先级称作'亚优先级'或'副优先级',每个中断源都需要被指定这两种优先级。

具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断嵌套,或者说高抢占式优先级的中断可以嵌套低抢占式优先级的中断。

当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。

如果这两个中断同时到达,则中断控制器根据他们的响应优先级高低来决定先处理哪一个;如果他们的抢占式优先级和响应优先级都相等,则根据他们在中断表中的排位顺序决定先处理哪一个。

三:优先级分组既然每个中断源都需要被指定这两种优先级,就需要有相应的寄存器位记录每个中断的优先级;在Cortex-M3中定义了8个比特位用于设置中断源的优先级,这8个比特位在NVIC应用中断与复位控制寄丛器(AIRCR)的中断优先级分组域中,可以有8种分配方式,如下:所有8位用于指定响应优先级最高1位用于指定抢占式优先级,最低7位用于指定响应优先级最高2位用于指定抢占式优先级,最低6位用于指定响应优先级最高3位用于指定抢占式优先级,最低5位用于指定响应优先级最高4位用于指定抢占式优先级,最低4位用于指定响应优先级最高5位用于指定抢占式优先级,最低3位用于指定响应优先级最高6位用于指定抢占式优先级,最低2位用于指定响应优先级最高7位用于指定抢占式优先级,最低1位用于指定响应优先级这就是优先级分组的概念。

学习笔记:STM32外部中断

学习笔记:STM32外部中断

学习笔记:STM32的外部中断(库函数)在为某引脚配置中断前,同样要先初始化该引脚的配置,用GPIO_Init()函数初始化,不同的是,由于是外部中断,所以输入模式要设置上拉输入。

假设外部中断引脚为PE.2,则该引脚初始化配置的程序为:IOIO口作为外部中断输入是复用功能,因此在此基础上还需要对另一个时钟信号进行初始化。

这是IO口作为复用功能时需要进行初始化的时钟,另外,要注意的是,做一般功能使用的IO口只需要调用第一个函数即可,而作为复用功能的IO口,两个函数都要调用,两者缺一不可,否则不能正常使用。

STM32的每个IO都可以作为外部中断的中断输入口,这点也是STM32的强大之处。

STM32F103的中断控制器支持19个外部中断/事件请求。

每个中断设有状态位,每个中断/事件都有独立的触发和屏蔽设置。

STM32F103的19个外部中断为:线0~15:对应外部IO口的输入中断。

线16:连接到PVD输出。

线17:连接到RTC闹钟事件。

线18:连接到USB唤醒事件。

从上面可以看出,STM32供IO口使用的中断线只有16个,但是STM32的IO口却远远不止16个,那么STM32是怎么把16个中断线和IO口一一对应起来的呢?于是STM32就这样设计,GPIO的管脚GPIOx.0~GPIOx.15(x=A,B,C,D,E,F,G)分别对应中断线0~15。

这样每个中断线对应了最多7个IO口,以线0为例:它对应了GPIOA.0、GPIOB.0、GPIOC.0、GPIOD.0、GPIOE.0、GPIOF.0、GPIOG.0。

而中断线每次只能连接到1个IO口上,这样就需要通过配置来决定对应的中断线配置到哪个GPIO上了。

下面我们看看GPIO跟中断线的映射关系图:在库函数中,配置GPIO与中断线的映射关系是通过函数GPIO_EXTILineConfig()来实现的:void GPIO_EXTILineConfig(uint8_t GPIO_PortSource,uint8_t GPIO_PinSource)该函数将端口与中断线映射起来,使用示例是:GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource2);将中断线2与GPIOE映射起来,那么很显然是GPIOE.2与EXTI2中断线连接了。

STM32外部中断处理流程

STM32外部中断处理流程

STM32外部中断处理流程外部中断是指引发中断的事件来自于MCU外部的输入引脚或外设,需要通过配置寄存器和中断服务程序来处理外部中断。

在STM32系列MCU中,外部中断处理可分为以下几个步骤。

1.配置中断引脚要使用外部中断功能,首先需要配置中断引脚。

对于STM32,外部中断引脚由GPIO口提供,需要通过GPIO配置寄存器设置相关引脚的工作模式、上下拉和中断触发方式等。

具体配置方法可以参考芯片手册。

2.配置中断控制器外部中断的中断源需要连接到中断控制器(NVIC),通过配置NVIC的相关寄存器来使能外部中断。

NVIC是位于ARM Cortex-M内核内部的外设,用于管理和分配中断优先级。

3.编写中断服务程序(ISR)中断服务程序(Interrupt Service Routine, ISR)是用于处理中断事件的函数,当外部中断引发时,MCU会跳转到相应的ISR进行处理。

在编写ISR时,需要注意以下几点:-确定中断源:可以通过读取中断状态寄存器来判断是哪个外部中断引起的中断。

-处理中断事件:根据中断源的不同,进行相应的处理。

例如,可以读取输入引脚状态、处理外设状态等。

-清除中断标志位:要在ISR内部清除中断标志位,以允许MCU再次响应该外部中断。

具体方法是通过读取相应的寄存器或调用相关函数清除中断标志位。

4.配置中断优先级中断优先级用于确定ISR的响应顺序,优先级较高的中断先被处理。

在STM32中,中断优先级可以通过配置中断控制器的相关寄存器进行设置。

5.启用中断在完成上述步骤后,需要启用相应的中断引脚和中断控制器。

具体方法是通过设置GPIO寄存器来使能中断引脚,并通过设置NVIC寄存器来使能相关中断。

6.处理中断请求一旦发生外部中断事件,MCU就会跳转到相应的ISR进行中断处理。

在ISR中,可以根据需要调用其他的函数或执行其他的操作。

处理完成后,可以通过清除中断标志位和退出中断函数来结束中断处理。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

STM32F4——NVIC中断优先级及外部中断
NVIC 中断优先级一、简介:CM4 内核可以支持256 个中断,包括16 个
内核中断和240 个外部中断,256 级的可编程中断设置。

对于STM32F4 没有用到CM4 内核的所有东西,只是用到了一部分,对于STM32F40 和41 系列共有92 个中断,其中有10 个内核中断和82 个可屏蔽中断,常用的为82 个可屏蔽中断。

二、相关寄存器:ISER[8]中断使能寄存器组,用来使能中断,每一位控制一个中断,由于上面已经说明了控制82 个可屏蔽的中断,因此利用ISER[0~2]这三个32 位寄存器就够了。

一下的几个寄存器同理。

ICER[8]中断除能寄存器组,用来消除中断。

ISPR[8]中断挂起控制寄存器组,用来挂起中断。

ICPR[8]中断解挂控制寄存器组,用来解除挂起。

IABR[8]中断激活标志寄存器组,对应位如果为1 则表示中断正在被执行。

IP[240]中断优先级控制寄存器组,它是用来设置中断优先级的。

我们只用到了IP[0]~IP[81],每个寄存器只用到了高4 位,这4 位又用来设置抢占优先级和响应优先级(有关抢占优先级和响应优先级后面会介绍到),而对于抢占优先
级和响应优先级各占多少位则由AIRCR 寄存器控制,相关设置如下图所示:
关于抢占优先级和响应优先级的理解,可以将它们简单的理解为两个级别,
抢占优先级的级别要比响应优先级的级别高,简单的理解为一个为长辈的一个
为晚辈的,晚辈要让着长辈,因此抢占优先级的中断可以打断响应优先级的中断,而同级别的中断就得有个先来后到的了,先来的先执行。

三、相关库函数应用1、中断优先级分组函数:void
NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup),用来设置设置中断优。

相关文档
最新文档