【正点原子K210连载】 第十五章 按键中断实验 摘自【正点原子】DNK210使用指南-CanMV版指南

news2025/1/15 17:40:53

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

第十五章 按键中断实验

本章实验将介绍如何使用CanMV让Kendryte K210通过中断的方式获取板载按键的状态。通过本章的学习,读者将学习到在CanMV下Kendryte K210的GPIO输入中断的使用。
本章分为如下几个小节:
15.1 maix.GPIO模块介绍
15.2 硬件设计
15.3 程序设计
15.4 运行验证

15.1 maix.GPIO模块介绍
有关maix.GPIO模块的介绍,请见第12.1小节《maix.GPIO模块介绍》。
15.2 硬件设计
15.2.1 例程功能

  1. 当KEY0按键被按下后,双色LED的红灯切换亮灭状态
    15.2.2 硬件资源
  2. 双色LED
    LEDR - IO24
  3. 独立按键
    KEY0按键 - IO18
    15.2.3 原理图
    本章实验内容,需要通过KEY0按键按下是产生的下降沿触发GPIO的中断,正点原子DNK210开发板上KEY0按键的连接原理图,如下图所示:
    在这里插入图片描述

图15.2.3.1 KEY0按键连接原理图
通过以上原理图可以看出,KEY0按键对应的IO编号为IO18,当KEY0按键被按下后,其对应IO的电平将变为低电平。
15.3 程序设计
15.3.1 maix.GPIO模块
有关maix.GPIO模块的介绍,请见第15.1小节《maix.GPIO模块介绍》。
15.3.2 程序流程图
在这里插入图片描述

图15.3.2.1 按键中断实验流程图
15.3.3 main.py代码

main.py中的脚本代码如下所示:
from board import board_info
from fpioa_manager import fm
from maix import GPIO
import time

# 为IO分配相应的硬件功能
fm.register(board_info.LEDR, fm.fpioa.GPIO0)
fm.register(board_info.KEY0, fm.fpioa.GPIOHS0)

# 构造GPIO对象
ledr = GPIO(GPIO.GPIO0, GPIO.OUT)
key0 = GPIO(GPIO.GPIOHS0, GPIO.IN, GPIO.PULL_UP)

# 配置GPIO对象的中断
def key_irq_handler(key):
    global key0
    global ledr
    time.sleep_ms(20)
    if key is key0 and key.value() == 0:
        ledr.value(not ledr.value())
key0.irq(key_irq_handler, GPIO.IRQ_FALLING, GPIO.WAKEUP_NOT_SUPPORT, 7)

while True:
    pass

可以看到,首先为使用到的IO分配相应的硬件功能,接着是构造GPIO对象,接着就是为KEY0按键对应GPIO对象配置中断,在中断服务函数key_irq_handler()中可以看到有一个20毫秒的延时,这是为了实现按键消抖,但不建议读者在实际的应用中在中断服务函数中添加延时,因为中断服务函数的执行应该要尽可能的快,如果需要在中断中执行比较耗时的事务,建议将该事务分为上下文进行执行,从而减少中断服务函数执行的时间。
15.4 运行验证
将DNK210开发板连接CanMV IDE,并点击CanMV IDE上的“开始(运行脚本)”按钮后,此时,若按下板载的KEY0按键,则能看到双色LED的红色LED切换了亮灭状态,多次按下KEY0按键,双色LED的红色LED也将多次切换亮灭状态,这与理论推断的结果一致。

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

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

相关文章

浅谈人工智能发展趋势

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

如何在Python中实现一个简单的爬虫程序

如何在Python中实现一个简单的爬虫程序 随着互联网的发展,数据已成为当今社会最宝贵的资源之一。而爬虫程序则成为了获取互联网数据的重要工具之一。本文将介绍如何在Python中实现一个简单的爬虫程序,并提供具体的代码示例。 确定目标网站 在开始编写爬…

单片机软件架构连载(1)-枚举(enum)

今天跟大家讲一下我在产品开发时,用枚举(enum)的一些骚操作,都是实战经验,不难,但开发经验尚浅的话,不一定能把它灵活应用。 为什么要讲枚举呢? 因为我发现它是一个容易被遗忘,同时又非常重要的…

LeetCode刷题之HOT100之二叉树的最近公共祖先

2024 7/1 新的一个月来啦!也算是迎来了暑假,可惜我们没有暑假,只能待实验室,中途会有10天小假。Anyway,做题啦 1、题目描述 2、算法分析 又来到了树的部分,要找最近的公共祖先。想到树就会想到DFS和BFS。…

护眼灯哪些牌子好?几款最好的护眼灯品牌排行榜分享

在当代社会,随着工作压力和学业负担的增加,人们的用眼时间越来越长,因此保护眼睛的需求变得愈发迫切。护眼台灯作为一种护眼产品,已经逐渐普及,成为许多人的助手。然而护眼灯哪些牌子好?今天,我…

3D交互可视化编辑器求推荐,最好是针对企业级使用的?

企业级使用的3D交互可视化编辑器,支持编辑和调整2D、3D渲染及交互设置,以下几款可以关注了解一下: 1、Unity:一个广泛使用的跨平台游戏引擎,由Unity Technologies开发。支持开发者创建2D和3D游戏、交互式应用以及虚拟…

4个文章生成器免费版分享,让文章创作更轻松便捷

在当今这个信息飞速传播的时代,文章创作的重要性愈发凸显。无论是从事内容创作的专业人士,还是偶尔需要撰写文章的普通大众,都希望能更高效地完成文章创作任务。而在实际操作中,我们常常会遇到思路卡顿、没有创作灵感的问题。今天…

全网最详细的 gin框架请求数据绑定Bind 源码解析 -- 帮助你全面了解gin框架的请求数据绑定原理和方法

在gin框架中,我们可以将多种请求数据(json, form,uri,header等)直接绑定到我们定义的结构体,底层是通过反射方式获取我们定义在结构体上面的tag来实现请求数据到我们的结构体数据的绑定的。 在gin的底层有2大体系的数据…

Apple苹果可能会在今年秋天宣布与Google Gemini谷歌双子座的交易

如果你对迄今为止唯一能与苹果设备集成的人工智能模型是ChatGPT感到失望,听起来你不必等待很长时间就能改变这种情况。据彭博社(Bloomberg)的马克古尔曼(Mark Gurman)今天在他的Power On时事通讯中称,苹果将…

GuLi商城-商品服务-API-三级分类-删除-逻辑删除

注意:官方文档说logic配置可以省略,代码中直观些,配上吧 逻辑删除注解: 实体类字段上加逻辑删除注解: 启动nacos: 启动商品服务: postman测试: 数据库字段值改成了0,说明…

Decorators与类

在Python中,装饰器(decorator)是一种用于修改函数或方法行为的特殊函数。装饰器可以用于函数、方法和类。在类中使用装饰器可以增强类的方法、属性,甚至整个类的功能。以下是一些关于我对装饰器与类的详细信息和示例教程。 1、问题…

vivado VIO IP核

参考:pg159 VIO:可以模拟输入/输出功能,实时监视和修改FPGA中的信号,用于调试和验证,与ILA相比,VIO无需占用RAM资源。 VIO IP的输出对于FPGA内部逻辑是输入信号,可以在调试界面设置输入值&…

第6章 复制

文章目录 前言1.配置1.1建立复制1.2断开复制1.3 安全性1.4 只读1.5 传输延迟 2. 拓扑2.1.一主一从结构2.2.一主多从结构2.3.树状主从结构 3.原理3.1复制过程3.2数据同步3.3全量复制 前言 复制功能,实现了相同数据的多个Redis副本。复制功能是高可用Redis的基础&…

STM32第十二课:ADC检测烟雾浓度(MQ2)

文章目录 需求一、MQ-2 气体传感器特点应用电路及引脚 二、实现流程1.开时钟,分频,配IO2.配置ADC的工作模式3.配置通道4.复位,AD校准5.数值的获取 需求实现总结 需求 使用ADC将MQ2模块检测到的烟雾浓度模拟量转化为数字量。 最后&#xff0c…

[Go 微服务] Kratos 验证码业务

文章目录 1.环境准备2.验证码服务2.1 kratos 初始化验证码服务项目2.2 使用 Protobuf 定义验证码生成接口2.3 业务逻辑代码实现 1.环境准备 protoc和protoc-gen-go插件安装和kratos工具安装 protoc下载 下载二进制文件:https://github.com/protocolbuffers/protobu…

CocosCreator构建IOS教程

CocosCreator构建IOS教程 添加include: Header Search Paths:拖拽include过来 添加SoundEngine: Header Search Paths: 把SoundEngine POSIX Common 三个文件夹拖拽到里面去

IEEE TNNLS | 脑电(EEG)自监督学习

摘要 数十年的研究表明,与传统的统计技术相比,机器学习在探索脑电图(EEG)记录中嵌入的高度非线性模式方面具有优势。然而,即使是最先进的机器学习技术也需要相对较大且标记完整的EEG存储库。EEG数据的收集和标记成本高昂。此外,由…

Google ghOSt 调度器分析(4)

调度器的优缺点 *ghOSt* 调度器的优缺点优点缺点*ghost* 与 *CFS* 调度运行时间比较 ghOSt 调度器的优缺点 优点 逻辑简单,实现简单;它只是在内核中增加了两个调度类,通过对这两个调度类的操作来完成相应任务的优先级的提升等操作&#xff…

HarmonyOS(42) Divider 分割器组件 实现分割线

Divider分割线 简介使用示例参考目录 简介 该组件可以帮助我们实现 水平分割线和竖直分割线,同时支持设置分割线的宽度、颜色、和两端的样式 使用示例 横向分割线 ,默认就是横向分割 // Horizontal dividerColumn() {this.Block()Divider()this.Bloc…

如何使用ChatGPT提高数学建模竞赛的获奖概率

如何使用ChatGPT提高数学建模竞赛的获奖概率 数学建模助手GPT https://chatgpt-plus.top/g/g-OX0D7uMn9-shu-ju-jian-mo-zhu-shou-by-maynor 1. 问题分析与理解 在数学建模的初期,准确理解问题的背景和要求至关重要。通过使用ChatGPT,你可以&#xff…