用 CanMV 让 Kendryte K210 控制板载的双色 LED 闪烁

本章实验将介绍如何使用 CanMV 让 Kendryte K210 控制板载的双色 LED 闪烁,以实现跑马 灯的效果。通过本章的学习,读者将学习到在 CanMV 下控制 Kendryte K210 的 GPIO 输出高低 电平。

maix.GPIO 模块介绍

Kendryte K210上有两种GPIO(General-purpose input/output,通用输入/输出),分别为GPIOHS (高速 GPIO)和 GPIO(通用 GPIOO)。 GPIOHS 一共有 32 个,其特点如下所示: 1. 可配置输入输出信号 2. 每个 IO 具有独立的中断源 3. 中断支持边缘触发和电平触发 4. 每个 IO 可以分配到 FPIOA 上 48 个管脚之一 5. 可配置上下拉,或者高阻 GPIO 一共有 8 个,其特点如下所示: 1. 可配置输入输出信号 2. 8 个 IO 使用一个中断源 3. 可配置触发 IO 总中断,边沿触发和电平触发 4. 每个 IO 可以分配到 FPIOA 上 48 个管脚之一 5. 可配置上下拉,或者高阻 在 CanMV 中可以使用 CanMV 提供的 maix.GPIO 模块操作 Kendryte K210 上的 GPIOHS 和 GPIO。maix.GPIO 模块可以配置 GPIOHS 和 GPIO 的输入输出模式、设置和获取输入输出值、使 能并配置和关闭中断。下面介绍 maix.GPIO 模块的功能。 maix.GPIO 模块中提供了一些常量,这些常用可以用于模块类函数和方法的传参,如下表所 示:

                                                        表 12.1.1 maix.GPIO 模块常量

maix.GPIO 模块提供了 GPIO 构造函数,用于创建一个 GPIO 对象,GPIO 构造函数如下所 示:

class GPIO(id, mode=None, pull=None, value=None)

通过 GPIO 构造函数可以通过指定参数创建一个 GPIO 对象。 id 指的是 GPIO 编号。 mode 可以指定 GPIO 的输入输出模式。 pull 可以指定 GPIO 的上下拉模式。 value 可以设置 GPIO 的初始输出电平。 GPIO 构造函数的使用示例如下所示:

from maix import GPIO gpiohs0 = GPIO(GPIO.GPIOHS0, mode=GPIO.OUT, pull=GPIO.PULL_NONE, value=0)

maix.GPIO 模块为 GPIO 对象提供了 init()方法,用于初始化 GPIO 对象的参数,init()方法如 下所示:

GPIO.init(mode=None, pull=None, value=None)

init()方法用于初始化 GPIO 对象的输入输出模式、上下拉模式和初识输出电平,当然,也可 以在构造 GPIO 对象的时候进行初始化。 init()方法的使用示例如下所示:

‘from maix import GPIO gpiohs0 = GPIO(GPIO.GPIOHS0) gpiohs0.init(mode=GPIO.OUT, pull=GPIO.PULL_NONE, value=0)

maix.GPIO 模块为 GPIO 对象提供了 value()方法,value()方法如下所示:

GPIO.value([value])

value 为可选参数,当 value 参数不为空时,value()方法将设置 GPIO 对象输出 value 指定的 电平,当 value 参数为空时,value()方法将获取并返回 GPIO 对象的电平状态。 value()方法的使用示例如下所示:

from maix import GPIO gpiohs0 = GPIO(GPIO.GPIOHS0, mode=GPIO.OUT, pull=GPIO.PULL_NONE, value=0) gpiohs0.value(1) value = gpiohs0.value()

maix.GPIO 为 GPIO 对象提供了 mode()方法,mode()方法如下所示:

GPIO.mode(mode=-1)

mode()方法用于配置 GPIO 对象的输入输出模式或上下拉模式,当然,也可以在构造 GPIO 对象的时候进行配置。 mode()方法的使用示例如下所示:

from maix import GPIO gpiohs0 = GPIO(GPIO.GPIOHS0, mode=GPIO.OUT, pull=GPIO.PULL_NONE, value=0) gpiohs0.mode(GPIO.IN) gpiohs0.mode(GPIO.PUll_UP)

maix.GPIO 为 GPIO 对象提供了 irq()方法,irq()方法如下所示:

GPIO.irq(handler=None, trigger=GPIO.IRQ_BOTH, wake=None, priority=7)

irq()方法用于配置 GPIO 对象的中断,可以配置 GPIO 对象的中断处理函数、中断触发方式、 中断优先等级等参数。 irq()方法的使用示例如下所示:

from maix import GPIO

def gpio_irq_handler(gpio): print('Hello', gpio) gpiohs0 = GPIO(GPIO.GPIOHS0, GPIO.IN, GPIO.PULL_PU) gpiohs0.irq(gpio_irq_handler, GPIO.IRQ_FALLING, GPIO.WAKEUP_NOT_SUPPORT, 7)

maix.GPIO 为 GPIO 对象提供了 disirq()方法,disirq()方法如下所示:

GPIO.disirq()

disirq()方法用于关闭 GPIO 对象的中断。 disirq()方法的使用示例如下所示:

from maix import GPIO def gpio_irq_handler(gpio): print('Hello', gpio) gpiohs0 = GPIO(GPIO.GPIOHS0, GPIO.IN, GPIO.PULL_PU) gpiohs0.irq(gpio_irq_handler, GPIO.IRQ_FALLING, GPIO.WAKEUP_NOT_SUPPORT, 7) gpiohs0.disirq()

程序流程图

main.py 代码

from board import board_info
from fpioa_manager import fm
from maix import GPIO
import time
# 为 LED 连接的 IO 注册 GPIO 功能
fm.register(board_info.LEDR, fm.fpioa.GPIO0)
fm.register(board_info.LEDB, fm.fpioa.GPIO1)
# 构造 GPIO 对象
ledr = GPIO(GPIO.GPIO0, mode=GPIO.OUT, pull=GPIO.PULL_NONE, value=1)
ledb = GPIO(GPIO.GPIO1, mode=GPIO.OUT, pull=GPIO.PULL_NONE, value=1)
while True:
 # 设置 LED 对应的 GPIO 对象输出对应的高低电平
 ledr.value(0)
 ledb.value(1)
 time.sleep_ms(200)
 ledr.value(1)
 ledb.value(0)
 time.sleep_ms(200)

  • 9
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值