K210外部中断

四、外部中断

(一)实验目的

利用中断方式来检查按键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语法的可以看我相关博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
K210是一款由中国芯片设计公司寒武纪(Kendryte)推出的低功耗、高性能的人工智能处理器。它具有强大的计算能力和丰富的外设接口,适用于物联网、机器人、智能家居等领域的开发。 在K210上使用Python进行串口中断编程,可以通过使用`machine.UART`模块来实现。下面是一个简单的示例代码: ```python import machine def uart_interrupt_handler(uart): # 处理串口中断事件的回调函数 if uart.any(): data = uart.read() # 处理接收到的数据 print("Received data:", data) # 初始化串口对象 uart = machine.UART(1, baudrate=115200, rx=8, tx=9) # 设置串口中断回调函数 uart.irq(handler=uart_interrupt_handler, trigger=machine.UART.RXNE) # 主循环 while True: pass ``` 在上述代码中,我们首先导入了`machine`模块,然后定义了一个名为`uart_interrupt_handler`的回调函数,用于处理串口中断事件。在回调函数中,我们通过`uart.any()`方法检查是否有数据可读,如果有则使用`uart.read()`方法读取数据,并进行相应的处理。 接下来,我们创建了一个`UART`对象,并通过指定参数来初始化串口,包括波特率、接收引脚和发送引脚。然后,我们使用`uart.irq()`方法设置了串口中断的回调函数和触发条件,这里我们选择了接收缓冲区非空时触发中断。 最后,我们进入主循环,通过`while True`保持程序的运行,等待串口中断事件的发生。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

命运从未公平

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

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

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

打赏作者

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

抵扣说明:

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

余额充值