GD32学习之路3----外部中断
本文介绍了如何利用GD32的外部中断功能实现按键检测。首先讲解了外部中断的基本原理,包括边沿检测和中断触发方式。通过PA0引脚连接按键的实例,演示了如何配置EXTI0中断线,实现按键按下时LED灯的翻转控制。在此基础上,进一步实现了带消抖功能的按键检测,通过双边沿检测和定时计数,成功区分了按键的短按(点亮LED)和长按(熄灭LED)操作。文章完整展示了从基础外部中断到复杂按键检测功能的实现过程。
·
上一节已经实现了按键的非阻塞检测和长按短按,接下来实现外部中断。
外部中断:检测对应引脚的上升沿或下降沿或者双边沿触发,如果有则产生对应的中断或者事件。
外部中断的作用:
1.检测GPIO口引脚电平是否有上升沿或下降沿或者双边沿的跳变。
2.可以当做开关
下面我来通过按键的例子来实现外部中断,同样先在工程中添加exti.c和exti.h两个文件,并添加到自己的工程中。
首先我们先通过GD32的参考手册查看有几个外部中断,GD32一共有23个外部中,如下图所示
接着查看哪些GPIO口对应的哪条外部中断线,如下图所示
一般我们用到前16个外部中断线即EXTI0-EXTI15,在低功耗场景有时会用到EXTI17 RTC闹钟唤醒事件。今天使用的GPIO口引脚是PA0,用到的外部中断线是EXTI0。
接下来通过配置外部中断来实现对应的功能,由于我使用的按键是直接接地的,GPIO口引脚配置成上拉输入,边沿检测使用的是上升沿(即判断松手时的状态)。
在前面LED灯驱动的章节的基础上新增了LED灯翻转的功能。
通过在主函数调用延时来验证按键是否按下即灯是否翻转
实现现象
按键每按下一次,灯进行翻转一次。
第一次按下,灯会进行点亮
再按一下,灯就会熄灭。
至此,外部中断你已经学会。
上面是没有消抖的功能,在这个基础上可根据上一章所说的内容实现外部中断+按键的消抖+长按和短按。
下面我来实现外部中断+按键的消抖+长按短按
首先将Key_period的变量类型改为16位的,8位的已经不能满足我们的需求了
其次将外部中断的模式改为双边沿检测
最后在中断服务函数中进行对Key_period的值进行判断区分长按还是短按
实验现象
按键短按,蓝色LED灯点亮
按键长按,蓝色LED灯熄灭
至此,你已经掌握了通过外部中断来实现按键的消抖、区分长按和短按。
更多推荐



所有评论(0)