备赛电赛学习STM32篇(四):EXIT外部中断

本文详细介绍了STM32的中断系统,包括中断初探、NVIC结构、优先级分组和EXTI外部中断。EXTI支持多种触发方式,可监测GPIO电平变化,并通过NVIC向CPU发送中断申请。文章通过对射式红外传感器和旋转编码器的应用实例,阐述EXTI配置和中断处理流程,强调中断函数中避免执行耗时操作和重复调用同一功能的重要性。
摘要由CSDN通过智能技术生成

目录

一、中断的初探

二、NVIC的结构

三、NVIC优先级分组

四、EXTI外部中断

1、简介

2、EXTI基本结构

3、AFIO复用IO口

4、EXTI框图

5、 使用外部中断模块的特性

五、相关代码编写

1、对射式红外传感器计次

2、旋转编码器计次

写在最后


一、中断的初探

概念:在程序运行过程中,出现了特定的中断触发条件(中断源),使得CPU暂停当前正在运行的程序,转而去处理中断程序,处理完成后又返回原来被暂停的位置继续运行。

中断优先级:当有多个中断源同时申请中断时,CPU会根据中断源的轻重缓急进行裁决,优先响应更加紧急的中断源。

中断嵌套:当一个程序运行时,又有新的更高优先级的中断源申请中断,CPU再次暂停当前中断程序,转而去处理新的中断程序,处理完成后依次进行返回。 

 STM32 有68个可屏蔽中断通道包含EXIT、TIM、ADC、USART、SPI、I2C、RTC等多个外设

使用NVIC统一管理中断,每个中断通道都拥有16个可编程的优先级,可对优先级进行分组,进一步设置抢占优先级和响应优先级

STM32(本课程使用的型号)中的中断资源如下表所示(表中灰色的部分是内核的中断资源,白色的部分是外设的中断资源)

在这里插入图片描述

 在这里插入图片描述

在这里插入图片描述

STM32中,每一个中断资源都有对应的地址(如上表所示)。在编程实现中,我们将中断要执行的操作放在一个子函数中,但是这个中断函数的地址由编译器动态分配,并不是固定的。但是由于硬件电路的限制,中断跳转时必须跳转到固定的地址执行程序,所以为了使硬件能够跳转到一个不固定的中断函数里,就需要在内存中定义一个固定的地址列表,中断条件满足后,就跳转到对应的固定位置,然后由编译器和一句跳转到中断函数位置的代码,这样中断就能跳转到任意位置了。在上述过程中,我们将中断地址的列表成为中断向量表,相当于中断跳转的一个跳板。
  应用C语言编程时,我们无需关心中断向量表的工作,这部分工作由编译器自动完成。
 

二、NVIC的结构

 NVIC是一个内核外设,相当于CPU的一个“秘书”,也相当于医院中为医生和患者服务的叫号系统。STM32的中断种类非常多,如果将这些中断全部连接给CPU,在设计上的复杂度将难以估量;斌且如果很多中断同时申请,或者很多中断产生了拥堵,也会增大CPU的处理难度,变相降低了CPU的运算效率。
  NVIC有很多输入口,可以连接不同外设的多条中断线路(通道)。上图中NVIC连接的每个外设线路上的 n nn 表示一个外设可能会同时占用多个中断通道。
  NVIC只有一个输出口,连接到CPU。NVIC根据每个中断的优先级分配中断的先后顺序,然后通过输出口告知CPU应该处理哪个中断。对于中断先后顺序分配的任务,CPU不需要知道。
  每个中断通道都拥有16个可编程的优先等级。 NVIC可以由此对优先级进行分组
 

三、NVIC优先级分组

NVIC的中断优先级由优先级寄存器的4位(0~15)决定,这四位可以进行切分、分为高n位的抢占优先级和低4-n位的响应优先级。

抢占优先级和响应优先级可以用医院看病的例子来解释,响应优先级高的,可以插队去看病,而抢占优先级不仅可以插队,还可以在上一个病人没看完病直接进去看病(中断嵌套)

这个优先级的数是值越小,优先级越高,0是最高优先级,抢占优先级和响应优先级相同的按照中断号排队

四、EXTI外部中断

1、简介

EXTI可以监测指定GPIO口的电平信号,当其指定的GPIO口产生电平变化时,EXTI立即向NVIC发出中断申请,经过NVIC裁决后即可中断CPU主程序,使CPU执行对应程序

支持的触发方式:上升沿、下降沿、双边沿、软件触发

支持的GPIO口:所有GPIO口,但相同的Pin不能同时触发中断(即PA1和PB1只能用一个当做触发中断的端口,如果有多个中断引脚,要选择不同pin的引脚)

通道数:16个GPIO_Pin,外加PVD输出,RTC闹钟,USB唤醒,以太网唤醒

触发响应方式:中断响应、事件响应

注:中断响应是正常的流程,引脚电平变化触发中断, 事件响应不会触发中断,而是触发别的外设操作,属于外设之间的联合工作

2、EXTI基本结构

注意:正常20路输入有20路的中断输出,但是ST公司觉得20个输出太多了

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

橘子ゆ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值