《DNK210使用指南 -CanMV版 V1.0》第十六章 machine模块实验

news/2024/9/20 12:38:24/文章来源:https://www.cnblogs.com/zdyz/p/18336656

第十六章 machine模块实验

1)实验平台:正点原子DNK210开发板

2)章节摘自【正点原子】DNK210使用指南 - CanMV版 V1.0

3)购买链接:https://detail.tmall.com/item.htm?&id=782801398750

4)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/k210/ATK-DNK210.html

5)正点原子官方B站:https://space.bilibili.com/394620890

6)正点原子K210技术交流企鹅群:605557868

本章实验将介绍machine模块的基础知识,以及machine模块内部分函数的使用。通过本章的学习,读者将学习到machine模块的基本使用方法。
本章分为如下几个小节:
16.1 machine模块介绍
16.2 硬件设计
16.3 程序设计
16.4 运行验证

16.1 machine模块介绍
machine模块是CanMV内置的模块,machine模块包含了与Kendryte K210硬件相关的特定功能,machine模块中的大部分功能允许实现对Kendryte K210上硬件(例如CPU、UART、Timer等)的直接且不受限制的访问和控制,因此能够帮助开发者快速地实验一些硬件功能。

machine模块提供了3个函数和7个类,machine模块提供的函数,如下表所示:

表16.1.1 machine模块提供的函数

machine模块提供的类,如下表所示:

表16.1.2 machine模块提供的类

本章着重介绍machine模块提供的函数,在后续章节将陆续对machine模块提供的部分类进行介绍。

machine模块提供了unique_id()函数,用于获取Kendryte K210的32字节唯一ID,unique_id()函数如下所示:

machine.unique_id()

unique_id()函数用于获取Kendryte K210的32字节唯一ID,32字节唯一 ID可以被作为每颗Kendryte K210芯片的“身份证”。

unique_id()函数的使用示例如下所示:

import machineuid = machine.unique.id()

machine模块提供了reset()函数,用于对Kednryte K210进行软件复位,reset()函数如下所示:

machine.reset()

reset()函数用于对Kendryte K210进行软件复位,相当于对板卡进行重启操作。

reset()函数的使用示例如下所示:

import machinemachine.reset()

machine模块提供了reset_cause()函数,用于获取Kendryte K210的复位原因,reset_cause()函数如下所示:

machine.reset_cause()

reset_cause()函数可以获取Kendryte K210本次运行前复位的复位原因,其中复位原因如下表所示:

表16.1.3 复位原因描述表

reset_cause()函数的使用示例如下所示:

import machinecause = machine.reset_cause()

16.2 硬件设计

16.2.1 例程功能

1.使用unique_id()函数,获取Kendryte K210的唯一ID,并打印输出

2.使用reset_cause()函数,获取Kendryte K210本次运行的复位原因,并打印输出

3.使用reset()函数,对Kendryte K210进行软件复位

16.2.2 硬件资源

本章实验内容,主要讲解machine模块中函数的使用,无需关注硬件资源。

16.2.3 原理图

本章实验内容,主要讲解machine模块中函数的使用,无需关注原理图。

16.3 程序设计

16.3.1 machine函数

有关machine函数的介绍,请见第16.1小节《machine模块介绍》。

16.3.2 程序流程图

图16.3.2.1 machine模块实验流程图

16.3.3 main.py代码

main.py中的脚本代码如下所示:

import machine
import time# 获取唯一ID并打印输出
uid = machine.unique_id()
print(uid)
print("".join(["%02X" % byte for byte in uid]))# 获取复位原因并打印输出
cause = machine.reset_cause()
def decode_cause(cause):if cause == (machine.PWRON_RESET or machine.HARD_RESET):return "Pin reset"elif cause == machine.WDT_RESET:return "WDT0 reset"elif cause == machine.WDT1_RESET:return "WDT1 reset"elif cause == machine.SOFT_RESET:return "Software reset"else:return "Unknow"
print(decode_cause(cause))# 延时一段时间
time.sleep_ms(500)# 软件复位
machine.reset()

可以看到,首先是通过machine.unique_id()函数获取Kendryte K210的唯一ID,并通过print()函数将其打印输出,但由于该函数返回的是bytes类型的数据,为了方便查看,同时将其格式化为十六进制数据进行打印输出。

接着是使用machine.reset_cause()函数获取复位原因,该函数返回的是一个int类型的数据,复位原因对应的int数据都以常量的形式保存在machine模块中如表16.1.3,在将复位原因转换为对应的字符串后,通过print()函数将其打印输出。

在最后是使用machine.reset()函数对Kendryte K210进行软件复位,复位后Kendryte K210将重新启动,CanMV也将重新运行。

16.4 运行验证
将DNK210开发板连接CanMV IDE,并点击CanMV IDE上的“开始(运行脚本)”按钮后,可以看到“串行终端”输出了一些信息,如下图所示:

图16.4.1 “串行终端”窗口打印输出

从“串行终端”的窗口中可以看到,前两行输出的是Kendryte K210的唯一ID,值得一提的是,虽然打印输出了64字节的唯一ID,但有效的只有前32字节。可以看到第三行,输出的是“Pin reset”,说明本次运行前的复位原因是“引脚复位”。

由于在main.py中的最后执行了machine.reset()函数,因此Kendryte K210将会执行一次复位,因此,通过CanMV IDE软件能观察到在执行完main.py后,原本处于“已连接”状态的Kendryte K210设备变为了“未连接”状态,如下图所示:


图16.4.2 设备断开连接

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

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

相关文章

使用Scanner类处理用户输入时,当捕获到异常后,需要适当的清理输入流,以确保程序可以正确继续执行

问题描述 代码示例 public class Example {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);while (true){System.out.print("正常输入一个数字: ");int anInt = scanner.nextInt();//正常输入try {//错误输入的字符System.out.p…

在处理用户输入时,当捕获到异常后,需要适当的清理输入流,以确保程序可以正确继续执行

问题描述 代码示例 public class Example {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);while (true){System.out.print("正常输入一个数字: ");int anInt = scanner.nextInt();//正常输入try {//错误输入的字符System.out.p…

Ubuntu20.04.2安装Cockpit通过web管理系统

Cockpit是一个简单易用的Web界面,让用户可以通过浏览器管理Linux服务器,支持系统监控、存储管理、网络配置和日志查看等,适合初学者和希望简化管理流程的系统管理员。目录什么是Cockpit安装启用&设为自动启动Wiki 什么是Cockpit Cockpit是一个简单易用的Web界面,让用户…

Flutter 自定义画笔案例

首先让我们来看下这张图当UI做的设计图中有这么一个元素,我想大多数人第一反应就是叫UI切图,然后直接使用Image加载,我一开始也是这么做的,毕竟省时省力省心。 但是由于后面需要针对不同的状态设置不同的颜色,我不想写过多判断语句来切换图标(我目前的做法是实现一个枚举…

IDL根据Landsat QA波段去云处理【代码】

IDL根据Landsat QA波段去云处理【代码】 ​ landsat QA波段(质量评估波段)是Landsat卫星影像数据中的一个特殊波段,他在Landsat5-9的每个产品中都存在。虽然我们常用的Landsat影像数据有B1-B7波段,但QA波段并不是其中之一。它可以反映出云、云阴影、雪等类别的像素,常…

zabbix应用教程:基于Nginx页面响应的日志监控用例

作者 乐维社区(forum.lwops.cn)许远 背景:某公司基于 Nginx 服务器搭建的网站,需要监控页面响应耗时的数据,因此该公司搭建了zabbix开源监控系统,当监控到页面响应时间超过3000ms阈值时,就进行告警通知。本文将通过日志关键字的监控来实现对页面响应时间感知,示例Zabbi…

【折腾记录】Ubuntu24.04LTS下安装Windows版微信

最近装了Win11和Ubuntu双系统,为了能更方便地和朋友交流,遂决定在Ubuntu下安装微信。 首先要去网上找教程,经过一番搜索,正当我在wine和deepin-wine之间犹豫不定之时,忽然发现了GitHub上的这个仓库zq1997/deepin-wine 据其README描述:deepin-wine环境与应用在Debian/Ubun…

cors-filter过滤器解决跨域问题

https://www.cnblogs.com/fanshuyao/cors-filter为第三方组件。 一、官网地址 http://software.dzhuvinov.com/cors-filter.html二、Springboot使用cors-filter 1、引入依赖<dependency><groupId>com.thetransactioncompany</groupId><artifactId>cors…

ThinkPHP6之Excel解析

PhpSpreadsheet解析Excel文件 安装 PhpSpreadsheet 通过 Composer 安装了 PhpSpreadsheet: composer require phpoffice/phpspreadsheet控制器 ExcelController <?phpnamespace app\controller;use think\facade\Db; use think\facade\Request; use think\facade\View; us…

腾讯云数据库认证官方的考试费是多少钱?

腾讯云的认证项目很多,包括云计算、大数据、人工智能等多个技术领域方向的认证路径,每个方向包括工程师(Associate)、高级工程师(Professional)、专家(Expert)三个不同的等级。 对于数据库方面,腾讯云的这三个级别的考试费用分别是: TCCA工程师:1200元 TCCP高级工程师:18…

P3043 [USACO12JAN] Bovine Alliance G 题解

P3043 [USACO12JAN] Bovine Alliance G 题目传送门 思路 首先分情况讨论每种联通块的可能,有三种不同的情况会对答案 \(ans\) 产生不同的贡献。 联通块有环如图,因为每条边都有要有归属,所以环上的边只能全都顺时针或逆时针属于某个点,且不在环上的点仅有一种可能。 因此该…

组合数学学习笔记(持续完善中)

基础知识 一、加法原理 完成某个工作有 \(n\) 类办法,第 \(i\) 类办法有 \(a_i\) 种,则完成此工作的方案数有 \(\sum\limits _{i=1}^n a_i\) 种。 二、乘法原理 完成某个工作有 \(n\) 个步骤,第 \(i\) 个步骤有 \(b_i\) 种,则完成此工作的方案数有 \(\prod\limits _{i=1}^n…