四、外部中断
(一)实验目的
利用中断方式来检查按键KEY状态,按键被按 下(产生外部中断)后使 LED_B蓝灯的亮灭状态反转。
需要注意的是:K210只有高速 GPIO才有外部中断,
(二)实验讲解
外部中断也是通过GPIO模块来配置,我们先来看看其配构造函数和使用方法:
1.函数调用
(1)GPIO(ID,MODE,PULL,VALUE):构造函数
- 【ID】内部 GPIO编号 ;
- 【MODE】 GPIO模式;
- GPIO.IN :输入模式
- GPIO.OUT :输出模式
- 【PULL】
- GPIO.PULL_UP :上拉
- GPIO.PULL_DOWN :下拉
- GPIO.PULL_NONE :无
- 【value】 GPIO初始化电平
- 1:高电平
- 0:低电平
(2)GPIO.irq(CALLBACK_FUNC,TRIGGER_CONDITION):配置中断函数
【CALLBACK_FUNC】 中断执行的回调函数,当中断触发的时候被调用,一个入口函数 pin_num
;
- PIN_NUM 返回的是触发中断的 GPIO 引脚号(只有GPIOHS支持中断,所以这里的引脚号也是GPIOHS的引脚号)
【TRIGGER_CONDITION】中断触发方式;
- GPIO.IRQ_RISING:上升沿触发
- GPIO.IRQ_FALLING:下降沿沿触发
- GPIO.IRQ_BOTH:上升沿和下降沿都触发
(3)GPIO.disirq():关闭中断
2.上升沿和下降沿
我们先来了解一下上升沿和下降沿的概念,由于按键KEY引脚是通过按键接到 GND,也就是我们所说的低电平 0”,所以当按键被按下再松开时,引脚先获得下降沿,再获得上升沿,如下图所示:
按键被按下时候可能会发生抖动,抖动如下图,有可能造成误判,因此我们需要使用延时函数来进行消抖:
(三)使用按键实现外部中断
编程思路中断跟GPIO按键章节类似,在初始化中断后,当系统检测到外部中断时候,执行 LED状态反转的代码即可。 流程图如下:
from Maix import GPIO
from fpioa_manager import fm
import utime
#注册IO,注意高速GPIO口才有中断
fm.register(12, fm.fpioa.GPIO0)# 普通
fm.register(16, fm.fpioa.GPIOHS0)# 注册为高速GPIO口
#构建lED和KEY对象
LED_B=GPIO(GPIO.GPIO0,GPIO.OUT,value=1)
KEY=GPIO(GPIO.GPIOHS0, GPIO.IN, GPIO.PULL_UP)# 上拉输入
#LED状态表示
state = 1
#中断回调函数
def fun(KEY):
global state #使用 global关键字 可以在函数内部声明变量为全局变量
utime.sleep_ms(10) #延时消抖
if KEY.value()==0: #确认按键被按下
state = not state #相当于按位取反
LED_B.value(state)
#开启中断,下降沿触发
KEY.irq(fun, GPIO.IRQ_FALLING)
ps:不懂python语法的可以看我相关博客