STM32单片机入门之外部中断(EXTI)理论框架篇

中断是单片机中一个重要的功能,我们可以利用中断功能来接受到许多突发性的信号,从而精确的捕获到引脚电平的跳变,这个特殊的功能可以减轻程序的执行负担,不用在主循环里一直做一些没有意义的重复判断,如果主程序一直在做这些重复判断,那么主程序就无法做其他事情了,因此,中断功能就出现了,用来帮助我们高效地完成信号检测与接收等功能。

        外部中断(EXTI)是众多有中断功能的外设之一,本篇内容就先借外部中断(EXTI)来学习中断这个功能。

        首先要了解中断的执行流程,在主程序执行的过程中,如果出现了中断源(例如电平信号跳变),那么就会停止运行主程序,转而跳到中断函数中执行中断函数,执行完后再返回主程序。

        在一个项目中,往往会有需要用到许多中断,那么这时候就需要给这些中断排序号,也就是设置优先级,这样当同时出现中断源触发中断时,单片机就可以先处理比较紧急的中断了,如果是在执行中断的时候又出现了一个中断源呢(中断嵌套)?这个时候也是要靠配置中断优先级来决定这个中断源能否被立马处理的。而优先级排序就需要用到NVIC这个小帮手了。

c188944955c04a10889f1c6df9829935.jpg

         接下来我们就介绍一下NVIC(嵌套中断控制向量器),NCIC是内核外设,专门用来为中断设置优先级的,这里的优先级可以设置到0-15,数字越小,优先级越高(0是最高优先级)。

        优先级又可以分为抢占优先级和响应优先级,抢占优先级高的中断1可以在另外一个中断2执行过程中直接停止这个中断2,立马去执行中断1。而响应优先级高的中断3先排好队,当正在执行的中断2处理完之后,再处理这个中断3。所以可以明显的看出,这两个优先级的区别就在于响应速度,抢占优先级高的可以打断正在执行的中断2,立马去执行中断1,而响应优先级高的中断3要等到中断2执行完之后,才可以执行中断3。

        这里STM32还专门为我们分好了组,我们只需要按需求配置好就可以了。(注意取值不要超过范围)778d314c496e41228489764e52300419.jpg

 如果抢占优先级和响应优先级都一样的话,这里主要就是看中断号来处理了。(在STM32使用手册中断)


        首先EXTI支持的触发源方式有四种,分别是上升沿,下降沿,双边沿,软件触发。

        EXTI有20个通道,除了16个GPIO引脚外,还有PVD输出,RTC闹钟,USB唤醒,以太网唤醒。但是要注意相同PIN值的引脚不可以同时触发中断(例GPIOA_Pin_1与GPIOB_Pin_1)

        触发响应方式分别为中断响应和事件响应,中断响应直接由CPU执行中断函数,事件响应具体是触发其他外设的响应。(例如触发ADC转化)

        我们最终介绍GPIO_Pin引脚触发中断,当在引脚上检测到信号以后,这个信号会通过AFIO来进行通道选择,如果是相同位号的GPIO口,那么AFIO就会选择其中一个GPIO口作为触发源,这里的GPIO要通过AFIO选择后才能连接到EXTI,是其他四个通道不用,可以直接连接到EXTI,GPIO通过选择后,连接到了EXTI的边沿检测和控制电路上。20个触发源通过EXTI后,分为两路输出,一路通向NVIC用于触发中断响应,一路通向其他外设用于触发事件响应。ecca61af5d0341d3869bdd452bc27721.jpg


        接下来是EXTI与NVIC内部电路的分析

        相同位号的GPIO口的触发源通过数据选择器后,数据选择器可以选择其中一个GPIO口来接入到后续电路中,像这样的数据选择器有16个,这就是NVIC的内部电路图。

09f55c30795546ad9be6830acefaaedd.jpg

        当经过数据选择器后,EXTI输入端就会输入信号,通过边缘检测寄存器搭配边缘检测电路来实现监测信号跳变,信号来到左边先遇到或门(弯边),或门当边缘检测电路或者软件中断事件寄存器有一个信号输出为1时,或门就会输出1,只有输入都为0时,输出才为0。所以这里EXTI支持软硬件触发。继续往左走,在将挂起寄存器置起了一个标志位的同时,也遇到了与门(直边),当与门的信号输入为1与X时,输出就是X,只有输入都为1时,输出才为1。这里的与门相当于一个开关,当事件屏蔽器置1时,信号就会原样输出另一路输入,当事件屏蔽器置0时,不论另一路输入是什么,都输出0,类似于开关的作用。再往左走就是一个脉冲发生器,这个脉冲发生器就是给一个脉冲信号,用于触发其他外设。这里的两个非门都是一样的作用,原理是一样的。394700562d8642f485783a2aa20e9027.jpg

        以上就是外部中断的理论部分,下一篇将会学习代码实践。

图均来自网络,如有侵权请联系本人

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值