上班摸鱼肝系列:梁山派开发板系列---7 外部中断按键点灯

基于keil5梁山派GD32F450的外部中断按键点灯实验

说明:

        上一期是利用独立按键完成了相关的实验,这一期我们主要是来学习外部中断,并配置好外部中断,进行按键点灯的实验,主要的步骤有:1:打开系统配置时钟,2:进行中断配置,3:外部中断服务函数,4:写入功能,5:查看现象,在此实验之前,我们需要对中断有个清晰的认识,并了解其原理、中断触发源、中断事件和优先级的相关概念,最后,分别在主函数和中断放入功能,从而达到主函数跑主函数的,中断触发就去执行中断的效果和目的。


文章目录

  • 系列文章目录
  • 一、中断的基础知识
    • 1.什么是中断
    • 2.外部中断
    • 3.中断触发源
    • 4.中断事件
    • 4.中断事件
  • 、实验:外部中断按键点灯实验
    • 1.打开系统配置时钟
    • 2.中断配置
    • 3.中断服务函数
    • 4.中断服务函数添加功能
    • 5.主函数添加流水灯功能
  • 三、现象
  • 总结

提示:以下部分参考于梁山派开发板学习指南,代码如有更有解可在评论区一起沟通交流哈。

一、中断的基础知识

以下摘自梁山派开发板学习指南:

1.什么是中断

        灵活的使用系统中断可以大大提高单片机对随机事件的实时处理能力,进而提高单片机的工作效率。那什么是中断呢?这里举一个例子,比如我们正在敲代码,突然有一个电话打过来,这时我们停止敲代码转而去接电话,然后在电话聊完事情之后继续敲代码。这里面的电话就相当于一个中断,打断我们当前做的事情,接电话聊事情就相当于中断需要去执行的事情,也就是中断服务程序。

2.外部中断

        EXTI(中断 / 事件控制器)包括 23 个相互独立的边沿检测电路并且能够向处理器内核产生中断请求或唤醒事件。EXTI 有三种触发类型:上升沿触发、下降沿触发和任意沿触发。 EXTI 中的每一个边沿检测电路都可以独立配置和屏蔽。每一个中断都有 4 位中断优先级配置位,可提供 16 个中断优先等级。

3.中断触发源

        EXTI 触发源包括来自 I/O 管脚的 16 根线以及来自内部模块的 7 根线。(包括 LVD RTC 闹钟、USB 唤醒、以太网唤醒、 RTC 侵入和时间戳、 RTC 唤醒)。通过配置 SYSCFG_EXTISSx 寄存器,所有的GPIO 管脚都可以被选作 EXTI 的触发源。

4.中断事件

        除了中断,EXTI 还可以向处理器提供事件信号。芯片内部有一个唤醒中断控制器( WIC , 用户可以让处理器和 NVIC 进入功耗极低的省电模式,由 WIC 来识别中断和事件以及判断优先级。当某些预期的事件发生时,EXTI 能唤醒处理器及整个系统。

5.中断优先级

        每一个中断都有 4 位可配置的优先级位,可以通过分组设置抢占优先级和响应优先级的位数。 所有可编程的中断都需要指定抢占优先级和响应优先级,抢占优先级决定是否可以产生中断嵌套, 响应优先级决定中断响应顺序,若两种优先级一样则看中断在中断向量表中的位置,位置越靠前越先响应。抢占优先级高(值小)的中断可以中断抢占优先级低(值大)的中断处理函数。当两个中断的抢占优先级相同时,即这两个中断没有嵌套关系,当一个中断到来后,若此时 CPU 正在处理另 一个中断,则后到来的中断就要等前一个中断处理函数处理完毕后才能被处理,当两个中断同时到达,则中断控制器会根据它们的响应优先级决定先处理哪个。
通常中断优先级分组只设置一次,它针对的是系统中所有的中断。后续设置某个中断的中断优
先级时,只需要设置在这个分组内的抢占优先级和响应优先级。

、实验:外部中断按键点灯实验

1.打开系统配置时钟

        首先,我们需要打开GPIO端口的时钟,其次是打开系统配置的时钟,由于GPIO端口的时钟在前两期的按键实验中已经打开,所以我们这里只需要打开系统配置的时钟,系统配置寄存器时钟为 RCU_SYSCFG,直接作为参数传入即可,如下图所示:

2.中断配置

        首先,我们要配置GPIO模式配置,由于也是已经配置好了,所以我们直接添加中断的配置就行,中断配置一般分为好几个步骤,又因为能更直观的查看和后期维护,我们先进行一些有关中断引脚的宏定义,如下图所示:

 

 

3.中断服务函数

        首先我们要到启动文件startup_gd32f450_470.s中找到我们要用的中断函数名,由于这是系统定义好的,我们直接用就好了,也不需要声明,也不能改名字,这是固定的,可以看到启动文件里面已经封装了很多的中断函数,其中就包括我们要用的 EXTI0_IRQHandler :

        清楚中断标志位是确保中断时候有效的:

4.中断服务函数添加功能

5.主函数添加流水灯功能

        在主函数添加流水灯的目的是可以看到MCU在执行中断和主函数时是互不影响的,流水灯能正常运行,在我们的中断服务函数中也能正常的进行串口打印数据:

        下面我们来看看编译烧录到板子的效果:

三、现象

        可以看到流水灯(主函数)和串口打印(中断服务函数)是互不干扰的:

外部中断点灯


总结

        这一期我们主要是学习了外部中断,并配置好外部中断,进行按键点灯的实验,复习了中断的知识点,中断可是非常重要的知识点,既要对中断有清晰的理解,也要在实战当中正确的运用。通过在主函数和中断服务函数中实现不一样的功能,我们可以体会到中断和我们的main主函数是互不干扰的,只是按键按下就触发中断,去执行中断服务函数里面的紧急事件,执行完后又继续跑主函数的功能,而由于MCU的速度是非常非常快的,我们肉眼是观察不出来瞬间的变化,所以这种微妙的切换是可以忽视的,也正因为我们现在跑的是裸机并且功能也只有打印和点灯流水灯,而在我们工作当中一个产品是有非常多要实现的功能的,这就需要我们做到中断轻量化,或者说上系统,例如FREERTOS等等,现在我们只是简单的实现并且体会中断的执行机制和原理就可以了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小邓上班摸鱼肝

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

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

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

打赏作者

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

抵扣说明:

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

余额充值