视觉开发板—K210自学笔记(三)

本期我们来遵循其他单片机的学习路线开始去做一位点灯大师—点亮一个LED。那么第一步还是先知道K210里面的硬件电路是怎么连接的,需要查看上一节的文档,看看开发板原理图到底是哪个LED跟哪个IO连在一起。

一、硬件电路

根据之前官方提供的assembly drawing资料我们能看到实际的LED的位置,一共有四个

LED,那么我们再来检查一下原理图里的这些灯到底是怎么连接的。

 

DS1很明显没有连接任何IO,所以它是不可控的,就是电源指示灯,只要数据线连接到PC,DS1就会被点亮。DS2和DS则分别被CH552_TX0和ISP_TX两个IO端口控制。

而LED1从命名来看就是自成一派,从原理图分析来看,这是一个RGB的三色灯,原理图写的已经非常详细了,里面核心是三个灯封装在一个器件里,分别被LED_R, LED_G, LED_B三个IO控制。

通过检查K210本身的IO我们看到,LED_R, LED_G, LED_B分别连接到CPU的IO_13, IO_12和IO_14,那么我们可以学习相关的IO编程方法来控制LED灯的亮灭了。

K210比较强大的功能是可以通过内部映射让外部引脚实现不同的功能,我们要学习如何让指定的IO干它能干的事。那么我们就需要学习实现这种映射关系的方法。这个与一般的单片机的学习稍有不同。

二、GPIO的配置

那么我们如何来理解K210的这种引脚映射的[内部功能]呢?K210 芯片上的 外部引脚 和 内部功能 是彼此独立的,引脚是指从芯片上引出的许多金属触点,也就是我们俗称的功能引脚,它可以是 GPIO / PWM / ADC / I2C 等内部功能引脚,传统的认知是引脚对应的内部功能是不可改变的,但可以复用的,而 K210 是可以通过映射来改变引脚功能的,看如下示意图理解具体的映射功能。

首先可以将 I2C 的 SCL/SDA 映射(MAP)到 IO6/IO7 引脚,从而在此引脚上进行 I2C 的读写操作。

    +------------------------------+

    |                              |

    |           +---+              |

<-----+ <-----+ |I2C|              |

 IO6|           +---+              |

    |           |                  |

    |           |   +----+         |

<-----+ <-------+   |UART|         |

 IO7|               +----+         |

    |                              |

    |           +---+              |

<-----+         |SPI|              |

 IO8|           +---+              |

    |                              |

    |             +---+            |

<-----+           |I2S|            |

 IO9|             +---+            |

    |                              |

    |                              |

    +------------------------------+

接着还可以将 SPI 的 SCLK/MOSI/MISO/CS 映射(MAP)到 IO6/IO7/IO8/IO9 引脚,也就可以在此引脚上进行 SPI 的读写操作。

    +------------------------------+

    |                              |

    |               +---+          |

<------<-------<--  |I2C|          |

 IO6|            |  +---+          |

    |            |                 |

    |            |       +----+    |

<------<------+  |       |UART|    |

 IO7|         |  |       +----+    |

    |         +--+-+               |

    |          |SPI|               |

<------<--------+--+               |

 IO8|           |                  |

    |           |                  |

    |           |    +---+         |

<------<--------+    |I2S|         |

 IO9|                +---+         |

    |                              |

    |                              |

    +------------------------------+

调用 register 函数将 pin 引脚与具体的硬件功能(GPIO/I2C/UART/I2S/SPI)绑定起来,在不使用的时候调用 unregister 释放引脚所绑定的硬件功能(或称 function ),这不同于传统单片机的理解, K210 可以将一定范围内的引脚映射到具体的硬件功能。

如下代码所示:

from fpioa_manager import fm

fm.register(11, fm.fpioa.GPIO0, force=True)

fm.register(12, fm.fpioa.GPIOHS0, force=True)

fm.register(13, fm.fpioa.UART2_TX)

fm.register(14, fm.fpioa.UART2_RX)

其中上段程序中的register函数,调用方法如下:

register (pin, func, force=True)#

pin: 功能映射引脚

function : 芯片功能

force: 强制分配,如果为True,则可以多次对同一个引脚注册;False则不允许同一引脚多次注册。默认为True是为了方便IDE多次运行程序使用

设置引脚(pin)对应的外设功能(func),默认启用强制绑定参数(force=True),它将强制更换指定的引脚功能,如果发现存在上一个绑定的引脚,则会发出一个警告,但不影响代码继续执行。

如果设置 force=False ,则会在 register 发现硬件功能已经被使用了,此时就会弹出异常,方便深度开发的时候不清楚 GPIO/HS 的分配情况,常见于运行某个代码的按键在访问某些功能的时候不能使用了的场合。

使用方法:

from fpioa_manager import fm

fm.register(16, fm.fpioa.GPIO2)

fm.register(13, fm.fpioa.GPIO2)

fm.register(12, fm.fpioa.GPIO2, force=False)

此时会出现提示:

[Warning] function is used by fm.fpioa.GPIO2(pin:16)

Traceback (most recent call last):

  File "<stdin>", line 5, in <module>

  File "fpioa_manager.py", line 20, in register

Exception: [Warning] function is used by fm.fpioa.GPIO2(pin:13)

可见提示了 fm.fpioa.GPIO2(pin:16) 和 fm.fpioa.GPIO2(pin:13) 的占用情况。

注意:

以下 GPIOHS 默认已经被使用, 程序中如非必要尽量不要使用,以下引脚已经在 MaxiPy 开机启动时注册,请注意。

GPIOHS

功能

GPIOHS31

LCD_DC

GPIOHS30

LCD_RST

GPIOHS29

SD_CS

GPIOHS28

MIC_LED_CLK

GPIOHS27

MIC_LED_DATA

三、程序开发实战

上一节的例程比较好的配合LCD的使用,如果是没有采购LCD的同学可以尝试学习本节提供的例程—点亮LED。再次强调一下,可能你曾经用过一些单片机,在手册上都规定了引脚和片上外设功能(就是芯片内部集成的外设,比如 GPIO、I2C、SPI 等)的绑定,或者重映射。比如规定了 I2C 只能用 Pin9 和 Pin10,启动了重映射功能后,只能用Pin11和Pin12

但是 MaixPy 所使用的硬件 K210 的片上外设对应的引脚(硬件引脚)是可以任意映射的,相比之下 K210 硬件设计和软件设计的自由度更大。 比如 I2C 可以使用 Pin11 和 Pin12,也可以改成其它任意引脚。注意要区分 GPIO  IO的区别, IO也可以叫Pin 也就是引脚,是芯片引出来的硬件引脚, GPIO是一种外设,可以控制这些Pin/IO 的外设。两者可以有一种方法映射,就像一道桥一样连接他们。因为有了这个强大的映射功能, 所以在使用引脚时,需要增加一步映射的步骤:

from fpioa_manager import fm    # 导入库

fm.register(28, fm.fpioa.GPIO0)

这里我们将引脚 28 映射为了 GPIO0 的功能, 执行了这句命令后,引脚28和GPIO0就映射(绑定)好了,要取消映射(解绑),则需要调用fm.unregister函数,如fm.unregister(28)可取消引脚28的绑定。

另外,Pin 和 外设只能唯一对应, 不能一对多,需要对同一个外设或者引脚重复映射,否则程序可能产生难以发现的错误(BUG)

接下来我们就要开始控制 LED 需要使用到 GPIO。board_info 与板卡相关,不同板卡配置不同,使用前需要手动配置。

程序如下:

from fpioa_manager import fm
from Maix import GPIO

io_led_red = 13
fm.register(io_led_red, fm.fpioa.GPIO0)

led_r=GPIO(GPIO.GPIO0, GPIO.OUT)
led_r.value(0)


按照前面运行代码的方法在终端里面运行代码, 会发现 LED 灯的红色被点亮了!

接下来我们分析代码:

从 fpioa_manager 包导入fm 对象,主要用于引脚和外设的映射

从包 Maix 导入了 GPIO 这个类, GPIO 外设相关操作

定义一个变量io_led_red,值为13,即Pin13/IO13, 具体 LED 的引脚连接到了芯片的哪个引脚,请在前面的硬件介绍中看原理图

使用fm(fpioa manager 的缩写)这个内置的对象来注册芯片的外设和引脚的对应关系, 这里 fm.fpioa.GPIO0 是K210的一个 GPIO 外设(注意区分 GPIO(外设) 和引脚(实实在在的硬件引脚)的区别 ),所以把 fm.fpioa.GPIO0 注册到了引脚 IO13;

然后定义一个 GPIO 对象led_r,使用 led_r.value(1) 或者 led_r.value(0) 来设置高低电平即可, 因为这里设置了低电平,根据上面的原理图可知低电平导通,LED灯亮。到这里已经可以点灯了,现在可以自己尝试用 for 循环来实现 LED 闪烁或者流水灯~做出不同的变换效果。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

最简单的基于 FFmpeg 的音频编码器(PCM 编码为 AAC)

最简单的基于 FFmpeg 的音频编码器&#xff08;PCM 编码为 AAC&#xff09; 最简单的基于 FFmpeg 的音频编码器&#xff08;PCM 编码为 AAC&#xff09;正文结果工程文件下载其他参考链接 最简单的基于 FFmpeg 的音频编码器&#xff08;PCM 编码为 AAC&#xff09; 参考雷霄骅…

【小沐学GIS】基于Android绘制三维数字地球Earth(OpenGL)

&#x1f37a;三维数字地球系列相关文章如下&#x1f37a;&#xff1a;1【小沐学GIS】基于C绘制三维数字地球Earth&#xff08;OpenGL、glfw、glut&#xff09;第一期2【小沐学GIS】基于C绘制三维数字地球Earth&#xff08;OpenGL、glfw、glut&#xff09;第二期3【小沐学GIS】…

Java:常用API接上篇 --黑马笔记

一、 StringBuilder类 StringBuilder代表可变字符串对象&#xff0c;相当于是一个容器&#xff0c;它里面的字符串是可以改变的&#xff0c;就是用来操作字符串的。 好处&#xff1a;StringBuilder比String更合适做字符串的修改操作&#xff0c;效率更高&#xff0c;代码也更…

例36:打开文件读出文件内容

1.建立一个EXE工程&#xff0c;在主窗体上放一个按钮&#xff0c;如图32。 图32 在按钮的单击事件中输入代码&#xff1a; Sub Form1_Command1_BN_Clicked(hWndForm As hWnd, hWndControl As hWnd)Dim s as StringDim 文件 As CWSTR FF_OpenFileDialog(hWndForm,_"打开…

微信自动预约小程序开发指南:从小白到专家

在数字化时代&#xff0c;预约小程序已成为各类服务行业的必备工具。本文将指导你从零开始&#xff0c;通过第三方小程序制作平台&#xff0c;顺利开发出一款具有预约功能的实用小程序。 第一步&#xff1a;注册登录第三方小程序制作平台 首先&#xff0c;你需要选择一个适合你…

案例:三台主机实现 级联复制

介绍&#xff1a;级联复制架构 级联复制架构 是一种特殊的主从结构&#xff0c;之前聊到的几种主从结构都只有两层&#xff0c;但级联复制架构中会有三层&#xff0c;关系如下&#xff1a; 也就是在级联复制架构中&#xff0c;存在两层从库&#xff0c;这实际上属于一主多从架…

Hive-架构与设计

架构与设计 一、背景和起源二、框架概述1.设计特点 三、架构图1.UI交互层2.Driver驱动层3.Compiler4.Metastore5.Execution Engine 四、执行流程1.发起请求2.获取执行计划3.获取元数据4.返回元数据5.返回执行计划6.运行执行计划7.运行结果获取 五、数据模型1.DataBase数据库2.T…

fast.ai 机器学习笔记(四)

机器学习 1&#xff1a;第 11 课 原文&#xff1a;medium.com/hiromi_suenaga/machine-learning-1-lesson-11-7564c3c18bbb 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 来自机器学习课程的个人笔记。随着我继续复习课程以“真正”理解它&#xff0c;这些笔记将继续…

[office] Excel2019函数MAXIFS怎么使用?Excel2019函数MAXIFS使用教程 #知识分享#微信#经验分享

Excel2019函数MAXIFS怎么使用&#xff1f;Excel2019函数MAXIFS使用教程 Excel2019函数MAXIFS怎么使用&#xff1f;这篇文章主要介绍了Excel2019函数MAXIFS使用教程,需要的朋友可以参考下 在今年&#xff0c;Excel除了新版本Excel2019&#xff0c;其中有一个新功能MAXIFS函数&am…

python_django高校运动会成绩管理系统4o4c3

田径运动会报名管理系统就是给学生进行网上报名&#xff0c;管理员管理报名信息的一种通用管理平台&#xff0c;从而方便管理人员对运动会的日常报名工作的管理。本系统的前台功能模块包括系统的基本操作、最新公告、运动项目和报名项目&#xff1b;系统的后台功能模块包括系统…

opencv计算机视觉

树莓派主机的无键盘解决 进入控制面板&#xff0c;更改适配器设置&#xff0c;WIFI属性&#xff0c;勾选 1.将网线两头分别接入树莓派和笔记本的网线接口 2.在无线连接属性那里勾选允许其他用户连接 3.运行cmd使用arp -a查看树莓派ip地址&#xff0c;或者使用ipscanner查看 cmd…

Nginx实战:1-安装搭建

目录 前言 一、yum安装 二、编译安装 1.下载安装包 2.解压 3.生成makefile文件 4.编译 5.安装执行 6.执行命令软连接 7.Nginx命令 前言 nginx的安装有两种方式&#xff1a; 1、yum安装&#xff1a;安装快速&#xff0c;但是无法在安装的时候带上想要的第三方包 2、…

巧用liteflow,告别if else,SpringBoot整合liteflow

假设有一个三个原子业务&#xff0c;吃饭、喝水、刷牙。 现在有三个场景&#xff0c;分别是 场景A: 吃饭->刷牙->喝水 官网地址&#xff1a;https://liteflow.cc/ 1.添加依赖&#xff1a; <dependency><groupId>com.yomahub</groupId><artifactI…

FPGA_工程_基于rom的vga显示

一 框图 二 代码修改 module Display #(parameter H_DISP 1280,parameter V_DISP 1024,parameter H_lcd 12d150,parameter V_lcd 12d150,parameter LCD_SIZE 15d10_000 ) ( input wire clk, input wire rst_n, input wire [11:0] lcd_xpos, //lcd horizontal coo…

python+django+vue汽车票在线预订系统58ip7

本课题使用Python语言进行开发。基于web,代码层面的操作主要在PyCharm中进行&#xff0c;将系统所使用到的表以及数据存储到MySQL数据库中 使用说明 使用Navicat或者其它工具&#xff0c;在mysql中创建对应名称的数据库&#xff0c;并导入项目的sql文件&#xff1b; 使用PyChar…

【Linux】学习-基础IO拓展篇

Linux基础IO拓展篇—详解文件系统 理解文件系统 在Linux基础IO篇中&#xff0c;我们站在用户的视角对文件进行了理解&#xff0c;主要是针对被打开的文件&#xff0c;那么有没有没有被打开的文件呢&#xff1f;当然有&#xff01;今天我们换个视角&#xff0c;来站在系统的角…

XSS-Lab

1.关于20关的payload合集。 <script>alert(1)</script> "><script>alert(1)</script> onclickalert(1) " onclick"alert(1) "><a href"javascript:alert(1)"> "><a HrEf"javascript:alert…

滑块验证码识别代码分享

平时我们开发爬虫会遇到各种各样的滑动验证码&#xff0c;如下图所示&#xff1a; 为了解决这个问题&#xff0c;我写了一个通用的滑块验证码识别代码&#xff0c;主要是分析图片&#xff0c;然后计算出滑块滑动的像素距离。但是像素距离大多数情况下都不会等于滑动距离&#x…

机器学习系列——(二十一)神经网络

引言 在当今数字化时代&#xff0c;机器学习技术正日益成为各行各业的核心。而在机器学习领域中&#xff0c;神经网络是一种备受瞩目的模型&#xff0c;因其出色的性能和广泛的应用而备受关注。本文将深入介绍神经网络&#xff0c;探讨其原理、结构以及应用。 一、简介 神经网…

一、基础算法之排序、二分、高精度、前缀和与差分、双指针算法、位运算、离散化、区间合并内容。

1.快速排序 算法思想&#xff1a;选择基准元素&#xff0c;比基准元素小的放左边&#xff0c;比基准元素大的放右边。每趟至少一个元素排好。 每一趟实现步骤&#xff1a; low>high&#xff0c;返回&#xff0c;排序完成选取基准元素xa[low],ilow,jhigh当i<j时&#x…