【正点原子K210连载】 第十二章 跑马灯实验 摘自【正点原子】DNK210使用指南-CanMV版指南

1)实验平台:正点原子ATK-DNK210开发板
2)平台购买地址https://detail.tmall.com/item.htm?id=731866264428
3)全套实验源码+手册+视频下载地址: http://www.openedv.com/docs/boards/xiaoxitongban

第十二章 跑马灯实验

本章实验将介绍如何使用CanMV让Kendryte K210控制板载的双色LED闪烁,以实现跑马灯的效果。通过本章的学习,读者将学习到在CanMV下控制Kendryte K210的GPIO输出高低电平。
本章分为如下几个小节:
12.1 maix.GPIO模块介绍
12.2 硬件设计
12.3 程序设计
12.4 运行验证

12.1 maix.GPIO模块介绍
Kendryte K210上有两种GPIO(General-purpose input/output,通用输入/输出),分别为GPIOHS(高速GPIO)和GPIO(通用GPIO)。
GPIOHS一共有32个,其特点如下所示:

  1. 可配置输入输出信号
  2. 每个IO具有独立的中断源
  3. 中断支持边缘触发和电平触发
  4. 每个IO可以分配到FPIOA上48个管脚之一
  5. 可配置上下拉,或者高阻
    GPIO一共有8个,其特点如下所示:
  6. 可配置输入输出信号
  7. 8个IO使用一个中断源
  8. 可配置触发IO总中断,边沿触发和电平触发
  9. 每个IO可以分配到FPIOA上48个管脚之一
  10. 可配置上下拉,或者高阻
    在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()
12.2 硬件设计
12.2.1 例程功能

  1. 控制板载双色LED轮流闪烁,实现跑马灯的效果
    12.2.2 硬件资源
  2. 双色LED
    LEDR - IO24
    LEDB - IO25
    12.2.3 原理图
    本章实验内容,需要控制板载双色LED轮流闪烁,以实现跑马灯的效果,正点原子DNK210开发板上双色LED的连接原理图,如下图所示:
    在这里插入图片描述

图12.2.3.1 双色LED连接原理图
通过以上原理图可以看出,双色LED中红色和蓝色LED对应的IO编号分别为IO24和IO25,且都是当IO输出低电平时LED亮起,当IO输出高电平时LED熄灭。
12.3 程序设计
12.3.1 maix.GPIO模块
有关maix.GPIO模块的介绍,请见第12.1小节《maix.GPIO模块介绍》。
12.3.2 程序流程图
在这里插入图片描述

图12.3.2.1 跑马灯实验流程图
12.3.3 main.py代码
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)

可以看到,首先通过fm.register()方法为控制双色LED的两个IO分别分配了GPIO0和GPIO1的功能,然后通过GPIO构造函数构造了两个GPIO对象,并均配置为输出模式,最后在一个循环中轮流设置这两个GPIO对象输出不同的高低电平并延时一段时间,从而应该能看到板载的双色LED轮流亮起、熄灭,实现跑马灯的效果。
12.4 运行验证
将DNK210开发板连接CanMV IDE,并点击CanMV IDE上的“开始(运行脚本)”按钮后,可以看到板载的双色LED轮流亮起、熄灭,实现跑马灯的效果,这与理论推断的结果一致。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/38459.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用 PHP 和 Selenium WebDriver 实现爬虫

随着互联网的蓬勃发展,我们可以轻松地获取海量的数据。而爬虫则是其中一种常见的数据获取方式,特别是在需要大量数据的数据分析和研究领域中,爬虫的应用越来越广泛。本文将介绍如何使用 php 和 selenium webdriver 实现爬虫。 一、什么是 Se…

Cmake使用笔记1

cmake 问题1: Selecting Windows SDK version 10.0.19041.0 to target Windows 10.0.19043. 问题分析 在Windows平台上,使用CMake或Visual Studio等开发工具时,选择正确的Windows SDK版本以确保你的应用程序能够针对目标Windows版本进行编…

iptables(12)实际应用举例:策略路由、iptables转发、TPROXY

简介 前面的文章中我们已经介绍过iptables的基本原理,表、链的基本操作,匹配条件、扩展模块、自定义链以及网络防火墙、NAT等基本配置及原理。 这篇文章将以实际应用出发,列举一个iptables的综合配置使用案例,将我们前面所涉及到的功能集合起来,形成一个完整的配置范例。…

SpringMVC的架构有什么优势?——控制器(一)

文章目录 控制器(Controller)1. 控制器(Controller):2. 请求映射(Request Mapping):3. 参数绑定(Request Parameters Binding):4. 视图解析器(View Resolver):5. 数据绑定(Data Binding):6. 表单验证(Form Validation)…

TAPD项目管理软件无法与企业微信进行关联

TAPD一段时间未使用后,需要重新启动,此时会出现你的企业微信尚未与TAPD账号关联的提示 解决方案:找到TAPD应用,先删除应用,然后再解除禁用即可

树洞陪聊陪玩交友程序系统源码,解锁交友新体验

在繁忙的都市生活中,你是否渴望找到一片属于自己的秘密花园,倾诉心声、分享快乐?今天,就让我带你走进这片名为“树洞”的神秘之地,感受陪聊陪玩交友的全新魅力! 🌳树洞陪聊陪玩交友程序系统 你…

DC/AC电源模块:为智能家居设备提供恒定的电力供应

BOSHIDA DC/AC电源模块:为智能家居设备提供恒定的电力供应 DC/AC电源模块是一种常见的电源转换器,它将直流电源(DC)转换为交流电源(AC),为智能家居设备提供恒定的电力供应。在智能家居系统中&a…

【React】portal

createPortal 允许你将 JSX 作为 children 渲染至 DOM 的不同部分。 createPortal(children, domNode, key?) 使用 portal 渲染模态对话框 import NoPortalExample from "./components/NoPortalExample"; import PortalExample from "./components/PortalEx…

新手在Temu上怎样上架商品?

作为新手卖家,学习如何在Temu上架商品是一个重要的步骤。Temu是海外版拼多多,受到了很多卖家的欢迎。在这篇文章中,我们将介绍如何在Temu上架商品的步骤,以帮助新手顺利开始在线销售。 一、Temu上架商品的步骤: 第一…

JVM(11):虚拟机性能分析和故障解决工具之jstack工具

1 jstack(Stack Trace forJava)作用 查看或导出 Java 应用程序中线程堆栈信息 。 线程快照是当前java虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、长时间等待外部资源等…

案例:MySQL主从复制与读写分离

一、案例分析 1.案例概述 在实际的生产环境中,如果对数据库的读和写都在同一个数据库服务器中操作,无论是在安全性、高可用性还是高并发等各个方面都是完全不能满足实际需求的。因此,一般来说都是通过主从复制(Master-Slave)来同步数据,再通…

uniapp + vite中 uni.scss 使用 /deep/ 不生效(踩坑记录三)

vite 中使用 /deep/ 进行样式穿透报错 原因:vite 中不支持,换成 ::v-deep 或:deep即可

python setup函数中,name参数的作用

setup函数是setuptools库中的一个函数,用于配置和分发Python软件包。 setup函数的name参数指定了该软件包的名称,这个名称在包发布到PyPI(Python Package Index)时会作为该包的标识符。其他开发者可以通过这个名称来安装和使用你…

C语言 求最大公约数和最小公倍数

这个程序定义了两个函数&#xff0c;一个用于计算两个正整数的最大公约数 (GCD)&#xff0c;另一个用于计算最小公倍数 (LCM)。在主函数中读取用户输入的两个正整数&#xff0c;并调用这两个函数输出结果。 #include <stdio.h>// 计算最大公约数的函数&#xff0c;使用辗…

[大师C语言(第四十篇)]C语言volatile关键字深度解析与实战技巧

第一部分&#xff1a;C语言volatile关键字深度解析 一、volatile关键字的作用 在C语言中&#xff0c;volatile关键字是一个用于声明变量的修饰符。它用于指定一个变量的值在程序执行过程中可能会被外部设备或中断服务程序修改&#xff0c;因此编译器不应该对这样的变量进行优…

浅谈人工智能发展趋势

第三次浪潮 人类科技发展的主线正沿着“能源”和“新型”展开。AI的尽头是光伏和储能。 如今我们正在经历第三次浪潮——信息文明。 社会生产力 劳动对象 劳动工具 劳动者 生产要素 农业文明铜器铁器 材料 人力工具 农民 土地人力 工业文明机车电力 材料动力 动力…

判断一个函数是否有装饰器

判断一个函数是否有装饰器 如何判断一个函数是否有装饰标记&#xff0c;如果有我们在pytest收集用例的时候能做一些什么操作呢 def my_decorator(func):def wrapper(*args, **kwargs):print("Function is being decorated!")return func(*args, **kwargs)return wr…

Java web应用性能分析之【prometheus监控K8s指标说明】

常规k8s的监控指标 单独 1、集群维度 集群状态集群节点数节点状态&#xff08;正常、不可达、未知&#xff09;节点的资源使用率&#xff08;CPU、内存、IO等&#xff09; 2、应用维度 应用响应时间 应用的错误率 应用的请求量 3、系统和集群组件维度 API服务器状态控…

springboot try...catch 影响事务回滚

示例 事务不会回滚 OverrideTransactional(rollbackFor Exception.class)public CommonResponse modifyTeaFormula(GemiTeaFormulaReq gemiTeaFormulaReq) {try {省略部分代码teaFormulaDao.deleteById(id);teaFormulaDetailDao.deleteById(id);} catch (Exception e) {logger…

Calendar类在Java中的高级应用与使用技巧

Calendar类在Java中的高级应用与使用技巧 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; **1. **引言 在Java中&#xff0c;处理日期和时间是开发中经常遇到…