STM32外部中断详解

                1:什么是中断

中断就是当主程序运行时触发了中断的特定条件(中断源:自己设定的),程序就跳转到中断函数,执行中断函数的程序,执行完中断函数再回到主程序。

当然中断也可以嵌套中断(就是套娃),也就是主函数遇到中断源,跳到中断函数执行中断程序的时候,又触发中断,跳到另一个中断函数执行中断,这个中断执行完,再回到上一个没执行完的中断,这种嵌套中断也是设置的抢占“优先级”产生的结果,对于优先级后面细说。

                2:为什么要使用中断

当我们想在接收外部信号的时候,一旦接收到满足条件的信号,我们就执行相应的中断程序,但是这个外部信号你不知道它多久来,或者这个信号来的相当频繁,就可以用“中断”来实现你的要求。(比如:测距模块,达到你设定的距离要求,触发中断。或者GPIO外设接收到上升沿信号或者下降沿信号,触发中断。等等)

其实“中断”我们在主程序中写判断语句也能达到中断的效果,也就是CPU执行程序时不断去判断是否达到了需要中断的条件,if(达到条件),就跳到条件函数。但是用这种写程序判断中断的办法,我们就大大占用了CPU的资源,这种频繁且简单的作业,就可以用中断来执行,就不用频繁的去判断条件,程序达到中断要求,自动执行中断函数,增加CPU资源的利用率。

                                简单来说,就是用了中断,你就不用在主函数不停去判断到底有没有触发中断条件,用了中断,到了中断源自动执行中断函数,CPU就可以放心去干其他事情,有点类似于!!-----------   你晚上定了闹钟,就可以放心睡觉,不用频繁爬起来看时间到点没有。(闹钟就是中断的中断源)       

                        接下来就是介绍中断的基本结构框架,结构框架搞清楚了,写程序照着框架,一个一个打通就搞定 

                3:EXIT外部中断基本结构

 

首先每个GPIO外设都有16个通道,但是EXIT中断只有16个中断接口(不算外加PVD输出,RTC闹钟,USB唤醒等等),所以要设置AFIO来选择中断引脚,那么AFIO怎么选择中断通道呢,那就相同的pin不能同时选择,例如:GPIOA的PA1和GPIOB的PB1不能同时选择,其余同理,这样避免每个GPIO选择同样的pin口的话,通道就够用了

(这里注意一下,看上面图EXIT中断接口接收16个中断通道,但是数一下传给NVIC的通道却不足16个,这是因为厂家把EXIT5到9集成在了一起,EXIT10到15集成在了一起,也就是说,5到9触发相同的中断,10到15也会触发相同的中断,这里写程序的时候注意一下,如果用到里面两个及以上的中断通道,记得用标志位来实现中断顺序)

通道的问题解决。

                                        ​​​​​​​        ​​​​​​​        接下来就是EXIT边沿检测及控制

这个就是选择你的中断触发方式,有上升沿触发/下降沿触发/双边沿触发/软件触发

顾名思义,上升沿就是电平信号由低电平上升到高电平触发中断

下降沿就是高电平下降到低电平触发中断

双边沿触发就是电平上升下降都触发中断

软件触发就是引脚没任何动作,程序里执行一句代码,就触发中断

                                                       看上面的结构图,最后只剩下配置NVIC

        介绍NVIC

NVIC又叫(嵌套中断向量控制器),这个又称为CPU的小助手,也就是配置中断优先级的,上面提到EXTIT有16个中断接口传给NVIC,那么这么多中断,CPU到底先执行那个呢,所以NVIC要给这些中断分配优先级,优先级高的先执行中断,其中优先级又分为响应优先级和抢占优先级,响应优先级:响应优先级就是,当上一个中断执行完后,插队到第一个执行中断。抢占优先级:抢占优先级的级别比响应优先级等级高,                                       当上一个中断还没执行完,立马插队,先执行抢占优先级,也就是一开始提到的嵌套中断。

这是分组方式,这里4位二进制可以表示0到15的数,对应16个优先级 

                                基本框架介绍完了,接下来写程序挨个打通就行

1:开启GPIO和AFIO的时钟

:2:初始化GPIOB外设,用结构体配置GPIO参数

:3:配置AFIO引脚选择器,选择想要的中断引脚

:

 4:初始化EXTI,用结构体配置EXTI参数

:5:选择NVIC的分组

:

6:初始化NVIC,用结构体配置NVIC的参数

 

 最后写想要执行的中断函数

根据自己想要的效果写程序就OK了

小白选手的自学总结,如有不正确的地方,还望大佬们指出。

最后感谢观看,祝我们都能成为这个领域的大佬!!!!! 

  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值