基于keil5梁山派GD32F450的外部中断按键点灯实验
说明:
上一期是利用独立按键完成了相关的实验,这一期我们主要是来学习外部中断,并配置好外部中断,进行按键点灯的实验,主要的步骤有:1:打开系统配置时钟,2:进行中断配置,3:外部中断服务函数,4:写入功能,5:查看现象,在此实验之前,我们需要对中断有个清晰的认识,并了解其原理、中断触发源、中断事件和优先级的相关概念,最后,分别在主函数和中断放入功能,从而达到主函数跑主函数的,中断触发就去执行中断的效果和目的。
文章目录
提示:以下部分参考于梁山派开发板学习指南,代码如有更有解可在评论区一起沟通交流哈。
一、中断的基础知识
以下摘自梁山派开发板学习指南:
1.什么是中断
2.外部中断
3.中断触发源
4.中断事件
5.中断优先级
二、实验:外部中断按键点灯实验
1.打开系统配置时钟
首先,我们需要打开GPIO端口的时钟,其次是打开系统配置的时钟,由于GPIO端口的时钟在前两期的按键实验中已经打开,所以我们这里只需要打开系统配置的时钟,系统配置寄存器时钟为 RCU_SYSCFG,直接作为参数传入即可,如下图所示:
2.中断配置
首先,我们要配置GPIO模式配置,由于也是已经配置好了,所以我们直接添加中断的配置就行,中断配置一般分为好几个步骤,又因为能更直观的查看和后期维护,我们先进行一些有关中断引脚的宏定义,如下图所示:
3.中断服务函数
首先我们要到启动文件startup_gd32f450_470.s中找到我们要用的中断函数名,由于这是系统定义好的,我们直接用就好了,也不需要声明,也不能改名字,这是固定的,可以看到启动文件里面已经封装了很多的中断函数,其中就包括我们要用的 EXTI0_IRQHandler :
清楚中断标志位是确保中断时候有效的:
4.中断服务函数添加功能
5.主函数添加流水灯功能
在主函数添加流水灯的目的是可以看到MCU在执行中断和主函数时是互不影响的,流水灯能正常运行,在我们的中断服务函数中也能正常的进行串口打印数据:
下面我们来看看编译烧录到板子的效果:
三、现象
可以看到流水灯(主函数)和串口打印(中断服务函数)是互不干扰的:
外部中断点灯
总结
这一期我们主要是学习了外部中断,并配置好外部中断,进行按键点灯的实验,复习了中断的知识点,中断可是非常重要的知识点,既要对中断有清晰的理解,也要在实战当中正确的运用。通过在主函数和中断服务函数中实现不一样的功能,我们可以体会到中断和我们的main主函数是互不干扰的,只是按键按下就触发中断,去执行中断服务函数里面的紧急事件,执行完后又继续跑主函数的功能,而由于MCU的速度是非常非常快的,我们肉眼是观察不出来瞬间的变化,所以这种微妙的切换是可以忽视的,也正因为我们现在跑的是裸机并且功能也只有打印和点灯流水灯,而在我们工作当中一个产品是有非常多要实现的功能的,这就需要我们做到中断轻量化,或者说上系统,例如FREERTOS等等,现在我们只是简单的实现并且体会中断的执行机制和原理就可以了。