上一章是关于GPIO的状态读取和输出,但是现实我们会遇到一种情况,我们想通过按一个按键,才相应的执行输出高电平或者低电平,或者执行计时器功能等等。
那这个功能怎么实现呢?
没错,我相信你已经想到了,那就是中断。
中断简介:
中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行。
咋一看,这个解释,怎么有点看不懂呢?是不是一点也不生动,不形象。
看不懂就对了,因为我们不是机器。我们要想理解它,就要把它想象成我们自己,也就是转换成“人话”。
转换成人话就是这样的。
中断是指“人”在持续的做一件事情过程中,由于出现某些意外情况需要“人”停下正在做的事情而去做意外的事情,“人”能停下手上正在做的事情转而去处理意外的事情,处理完毕后又继续做暂停的事情。
我想我们生活或者工作中经常遇到这种事情,我们在持续专注的做一件事情,结果被同事或者其他的事情打断了,我们就停下手中的事情进而去做别的事情了。这其实就是“中断”。
我相信大家看完上面的叙述应该已经理解(不是了解)了中断,一个事情只有大脑理解了,我们去执行的时候效率才会高,才会永久的记住。这也许才是我们学习的目的。
下面还有一个概念,相信你已经无师自通了。
·中断优先权
官方解释我就不放了,其实就是我们被中断的事情排了个顺序。也就是哪个比较紧急,我们就先处理,至于“紧急”的程度,需要我们自己去设置。
就好比生活工作中,同时有好几件事情需要你同时去做,你不可能同时去做,只能根据重要程度在心中排个顺序,然后再一件一件去执行。这样你才能把每一件事情做好,这也就是我们的“能力”,即应对意外情况不慌张进而处理意外情况的能力。
我怎么感觉我越说越跑题了呢,还是收回思绪,我们接着做实验吧。
1.新建工程。
如果不知道怎么新建可以翻我上面几篇教程,这里不再阐述了,直接进入重点。
2.打开.ioc
3.配置RCC,使用外部时钟源
4.配置调试引脚
“Serial Wire”:选中该选项后,相应的I/O引脚(3)会变成调试引脚。
注意:I/O引脚成为调试引脚后,不可再复用其它的功能。
5.将LED的3个引脚(PI5,PI6,PI7)设置为 GPIO_Output
单击对应的引脚,然后选中"GPIO_Output",引脚变为绿色。
注意:再操作一遍就是取消引脚设置。
然后怎么配置引脚呢?
单击System Core -> GPIO,然后会显示所有GPIO引脚的设置。
重点来了!以上其实和普通配置是一样的,下面是中断和其他的区别。
6.将 ARM_KEY对应的引脚(PH15)设置为 GPIO_EXTI15
就是这样子的。
GPIO_EXIT有6种模式,这里选择下降沿触发外部中断。
7.设置NVIC(嵌套向量中断控制器)
这个其实就是我们上面说的设置中断优先级的地方。
STM32的中断向量具有两个属性,一个为抢占属性,另一个为响应属性,其属性编号越小,表明它的优先级别越高。
8.时钟源设置,选择外部高速时钟源,配置为最大主频
9.工程文件设置
10. Code Generator设置
11.然后Ctrl + S保存,然后自动生成代码
12.然后打开main.c文件,在*USER CODF BEGIN *字样之间调用中断函数。
至此,通过按键触发中断的试验已经完毕。
————————————————————
小结:我刚开始做的时候容易把清除标志位的情况忘记,所以在写程序的的时候最好写完回调函数就立即把清除标志的代码敲上,否则就会出现一直触发中断的情况。
说了这么多,大家记得留意下方评论第一条(或者私信我)有干货~