营销型网站商城,网站视频主持,农家乐网站设计费用,app制作多少钱一个目录
一、中断的基本概念
二、NVIC
1.NVIC的概念
2、NVIC的组成
3、NVIC的应用
4.NVIC的结构
三、外部中断EXTI
1.外部中断的概念
2.EXTI基本结构
四、EXTI外部中断的配置流程
1.开启APB2中的GPIO口/AFIO时钟
2.GPIO配置成输入模式
3.AFIO选择中断引脚
4.EXTI初始…目录
一、中断的基本概念
二、NVIC
1.NVIC的概念
2、NVIC的组成
3、NVIC的应用
4.NVIC的结构
三、外部中断EXTI
1.外部中断的概念
2.EXTI基本结构
四、EXTI外部中断的配置流程
1.开启APB2中的GPIO口/AFIO时钟
2.GPIO配置成输入模式
3.AFIO选择中断引脚
4.EXTI初始化
5.NVIC配置
6.中断服务函数 一、中断的基本概念 在STM32中中断系统是一种非常强大的功能他允许CPU在执行代码的时候暂停当前任务然后转而执行特定的中断服务函数ISR处理完成后再返回主函数中继续执行原来的代码。这种机制使得STM32能够高效的相应外部事件和内部状态变化无需不断的轮询检测从而大大提高了CPU的利用率。 中断是一种异步事件的处理机制他打破了当前程序的执行流程。当中断发生时当前任务会被中断保存上下文如寄存器的值堆栈的指针等然后跳转到中断向量表中找到对应的中断服务函数ISR去处理中断事件处理完毕后CPU会恢复原来的上下文继续执行以前的任务。 STM32中内置了灵活且功能强大的中断寄存器NVICNested Vectored Interrupt Controller他负责管理和分配中断IQR请求的优先级处理程序的执行顺序以及中断处理过程的调度。每一个中断源都有一个特定的中断号IQRn并通过中断向量表和相对应的ISR关联起来。 STM32中包含了68个可屏蔽中断通道包含EXTI、TIM、ADC、USART、SPI、I2C、RTC等多个外设 使用NVIC统一管理中断每个中断通道都拥有16个可编程的优先等级可对优先级进行分组进一步设置抢占优先级和响应优先级 下图是中断向量表 中断向量表是计算机系统中一个重要的组成部分它用于存放中断向量即中断类型号与对应的中断服务程序入口地址之间的映射关系。由于硬件原因CPU只能从某些特定的地址处访问中断函数即只能从中断向量表中的地址去访问。我们写的中断服务函数其名称和入口地址通常会在链接时被放置在中断向量表的相应位置。这样当中断发生时CPU就能根据中断向量表找到并跳转到我们编写的中断服务函数执行。 二、NVIC
1.NVIC的概念 NVICNested Vectored Interrupt Controller是STM32微控制器中的中断控制器它负责管理和处理微控制器的中断。即相当于CPU的中断助手帮助CPU来管理中断NVIC提供了灵活、高效、可扩展的中断处理机制支持多级优先级、多向中断、嵌套向量中断等特性。其主要功能包括
中断向量表存储所有中断的服务程序地址当中断发生时CPU会根据中断向量表跳转到对应的中断服务程序执行。中断优先级管理允许为不同中断分配不同的优先级以控制中断的响应顺序。NVIC的中断优先级由优先级寄存器的4位0~15决定这4位可以进行切分分为高n位的抢占优先级和低4-n位的响应优先级。抢占优先级高的中断可以打断低优先级的中断实现中断嵌套。响应优先级高的中断在相同抢占优先级下可以优先排队。中断使能和禁用可以启用或禁用特定的中断以便根据系统需求灵活控制中断的响应。中断触发方式支持多种中断触发方式如上升沿、下降沿等以满足不同中断源的需求。
2、NVIC的组成
NVIC由以下几个部分组成
中断优先级和控制器负责中断的挂起、解挂和优先级管理。向量表存储每个中断源对应的中断处理程序的入口地址。系统控制寄存器提供了对NVIC中断控制器的配置和控制。特殊功能寄存器NVIC中断控制器对外暴露的寄存器用于实现对中断处理的控制包括中断使能、中断标志、中断状态等。
3、NVIC的应用
NVIC在STM32中的应用非常广泛主要包括以下几个方面
中断优先级设置用户可以根据不同的需求对中断优先级进行设置以实现对中断的响应和处理。这有助于确保系统在有多个中断发生时能够高效地处理优先级较高的中断事件。中断嵌套处理NVIC支持中断嵌套处理即高优先级的中断可以打断低优先级的中断。这有助于系统在处理紧急中断事件时能够迅速响应并处理。低功耗模式下的中断管理当CPU处于低功耗模式时NVIC提供了挂起和解挂中断的机制可以根据不同需求设置相应的中断使能和关闭。这有助于降低系统的功耗并延长电池寿命。中断标志复位NVIC提供了中断标志复位功能可以清除某个中断事件的标志位。这在中断处理过后需要清除标志位的情况下尤为重要以确保系统能够正确识别和处理后续的中断事件。
4.NVIC的结构 每一个中断都要被NVIC管理起来所以一旦就中断产生都要经过NVIC来确认优先级才能被NVIC递交给CPU。 三、外部中断EXTI
1.外部中断的概念 对于互联型产品外部中断/事件控制器由20个产生事件/中断请求的边沿检测器组成对于其它产品则有19个能产生事件/中断请求的边沿检测器。每个输入线可以独立地配置输入类型(脉冲 或挂起)和对应的触发事件(上升沿或下降沿或者双边沿都触发)。每个输入线都可以独立地被屏 蔽。挂起寄存器保持着状态线的中断请求。 EXTI可以监测指定GPIO口的电平信号当其指定的GPIO口产生电平变化时EXTI将立即向NVIC发出中断申请经过NVIC裁决后即可中断CPU主程序使CPU执行EXTI对应的中断程序 支持的触发方式上升沿/下降沿/双边沿/软件触发 支持的GPIO口所有GPIO口但相同的Pin不能同时触发中断 通道数16个GPIO_Pin外加PVD输出、RTC闹钟、USB唤醒、以太网唤醒 触发响应方式中断响应/事件响应 2.EXTI基本结构 从下图中可以看到在初始化中首先会通过APIO进行引脚选择然后由AFIO将选择的引脚传递给EXTI进行边沿检测和控制。这时EXTI就开始检测被选择的引脚了当中断来临的时候EXTI就看看是哪一路中断发生了然后通过对应的EXTI信道传递给NVIC。NVIC再来对中断进行管理如果同时有多个中断来临则判断优先级递交给CPU如果来了优先级更高的中断则进行中断嵌套等等。 下面的图片是AFIO的示意图。 AFIO就是一个选择器当我们软件选择了某个引脚作为EXTI的时候则AFIO会把这个引脚对应的线路连接到EXTIX上从而实现后面的过程。但是从下面的图中可以看到当Pin脚号相同的时候只能有一个Pin脚被选中即不能有同样的Pin脚作为EXTI 四、EXTI外部中断的配置流程
配置STM32的中断系统通常需要经过以下几个步骤 启用外设时钟要启用与中断相关的外设如GPIO、定时器等首先需要为这些外设启用时钟。 配置外设为中断模式根据中断源的类型配置相应的外设为中断模式。例如对于外部中断需要配置对应的GPIO引脚为中断输入模式并设置触发方式如上升沿触发、下降沿触发或双边沿触发。 配置NVIC通过NVIC设置中断的优先级并启用对应的中断。STM32的NVIC支持中断优先级的配置可以通过相关函数设置中断的抢占优先级和子优先级。优先级较高的中断可以中断正在执行的低优先级中断处理程序。 编写ISR为每个中断源编写相应的ISR中断服务程序。ISR是实际处理中断事件的函数需要按照固定的函数原型编写。在ISR中应首先检查中断发生标志然后执行相应的中断处理逻辑最后清除中断标志以准备下一次中断。 使能中断确保在主函数中启用了外部中断并进入主循环。在主循环中可以执行其他任务等待中断的发生。
1.开启APB2中的GPIO口/AFIO时钟 按道理来说是需要开启NVIC和EXTI的时钟的但是这两个时钟是由内部提供无需我们手动开启默认一直都是打开的状态而且标准库中也没有相关的库函数 2.GPIO配置成输入模式 因为要检测外部中断GPIO配置成输入模式是必然的 3.AFIO选择中断引脚 在这个函数中选择要对哪一个GPIO的哪一个Pin脚选中 4.EXTI初始化 初始化的结构体 结构体中的内容填充 5.NVIC配置
NVIC中断分组
注意在STM32的系统代码中NVIC中断分组通常只设置一次并且一旦设置后就不再更改。这是因为随意改变分组会导致中断管理混乱程序可能出现意想不到的执行结果。因此在系统初始化时会根据需要选择一个合适的分组配置并在整个系统运行过程中保持不变。
中断优先级的设置 用来初始化的结构体 NVIC_IRQChannel中断请求信道的定义 如此一来EXTI外部中断的所有初始化配置就已经完成了我们还需要一个中断服务函数 6.中断服务函数 中断服务函数与其他的函数不同他被定义在启动文件Start_up_stm32f10x_md.s中我们找的时候一定不要找到EXTI文件中了否则是怎么样都找不到的。 在51单片机中我们使用interrupt X的形式来定义中断服务函数的在STM32中中断服务函数的名字被限制死了必须是中断向量表其中的名字。
中断向量表 在中断处理函数中值得注意的一点是为了节约资源EXTI的10-15和5-9号中断函数都用的是一个相同的函数名这使得我们在中断服务函数中必须要检测是哪个信道产生的中断再来决定下一步的执行逻辑。此外还需要我们手动清除中断标志位。 检测是哪一个中断信道产生的中断检测中断挂起标志位 清除中断挂起标志位 完整的中断服务函数就如下面这样