K210入门必看(MAIX DOCK)(一)

news/2025/2/4 11:53:38/

目录

K210芯片上IO口

板子上的引脚  

如何理解【引脚]映射[内部功能]?

fpioa_manage 类

1、register(pin, func, force=True) 

2、unregister(pin) 介绍

3、get_pin_by_function(pin)

4、 get_gpio_used()

FPIOA类介绍 

1、set_function(pin, func)函数

 2、get_Pin_num(func)

默认对应关系

映射的主要程序

附  片内外设表 


        兄弟们,向入门K210,看我这个文章一定让你受益匪浅,和传统的开发模式又有很大的不同,甚至和OpenMv也不也一样,当然规则是一样的,就是GPIO的使用方法不一样。我的板子是MAIX DOCK开发板。大家注意引脚

K210芯片上IO口

        这仅仅是芯片上的接口,并不是引出来的焊接在板子上的IO的名字。相对于K210芯片上共有32+8个GPIO。就是我们软件可以直接控制,这40个引脚输入输出。如果想外接设备,那就得用到板子上的引脚,和K210芯片引脚不是一一对应的,需要用软件挂载上去,才能使用板子上的某个引脚。举个例子,有两列人,一列是男人,一列是女人,男人代表板子上的引脚,女人代表K210芯片上的引脚,我们可以通过软件控制女人去随便选择一个男人,这样这个男人才有用,做出相对应的功能。这个也叫引脚映射内部功能。

General Purpose Input Output (通用输入/输出)简称为 GPIO,或总线扩展器。

K210上有高速 GPIO(GPIOHS) 和通用 GPIO
在 K210 上, GPIO 有以下特征:

  • 32个高速 GPIO:

    高速 GPIO 为 GPIOHS,共 32 个。具有如下特点:

    • 可配置输入输出信号
    • 每个 IO 具有独立中断源
    • 中断支持边沿触发和电平触发
    • 每个 IO 可以分配到 FPIOA 上 48 个管脚之一
    • 可配置上下拉,或者高阻
  • 8个通用 GPIO:

    通用 GPIO 共 8 个,具有如下特点:

    • 8 个 IO 使用一个中断源
    • 可配置输入输出信号
    • 可配置触发 IO 总中断,边沿触发和电平触发
    • 每个 IO 可以分配到 FPIOA 上 48 个管脚之一

板子上的引脚  

       可以看原理图,这是板子上的引脚,需要挂载芯片上的引脚,才能发挥特定的功能。数数是20+20+18+18 = 78 个引脚。这个板子把所有的引脚的都引出来了,包括LCD屏的8080口,所以有些引脚并不能用,例如LCD_D0~LCD_D7,DVP_D0~DVP_D7。上面写着IO0~IO47,这些都是好使的,但是也有几个特殊的,IO36~IO47,这几个都是控制LCD和DVP的,也别用。

 

如何理解【引脚]映射[内部功能]?

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

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

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

from fpioa_manager import fmfm.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)# other codefm.unregister(11)
fm.unregister(12)
fm.unregister(13)
fm.unregister(14)

fpioa_manage 类

        此类可以完成引脚重映射 

1、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)

2、unregister(pin) 介绍

        释放引脚(pin)上的硬件功能(GPIO/I2C/SPI/I2S/UART)。

3、get_pin_by_function(pin)

        获取引脚(pin)上绑定的硬件功能。

4、 get_gpio_used()

        获取所有 gpio 的使用情况,它只查询 GPIOHS / GPIO 的引脚分配情况, None 表示该硬件功能未被使用。

FPIOA类介绍 

  利用此类里面的函数,也可以设置GPIO的重映射

1、set_function(pin, func)函数

参数:

  • pin: 引脚编号,取值 [0, 47], 具体的引脚连接请看电路图, 也可以使用 board_info. 然后按 TAB 按键补全来获得板子的常用引脚,比如 board_info.LED_G
  • func: 外设功能,传一个整型值,可以通过 fm.fpioa.help()或者查本页末尾的 附录: 外设表 表得到

比如 需要将连接 绿色 LED 的引脚映射到 高速 GPIO0 上:

fpioa = FPIOA()
fpioa.set_function(board_info.LED_G, fm.fpioa.GPIOHS0)

 2、get_Pin_num(func)

参数:

  • func: 外设功能,传一个整型值,可以通过 fm.fpioa.help()或者查本页末尾的 附录: 外设表 表得到
fpioa = FPIOA()
fpioa.set_function(board_info.LED_G, fm.fpioa.GPIOHS0)
pin = fpioa.get_Pin_num(fm.fpioa.GPIOHS0)
if pin == board_info.LED_G:print("set function ok")

默认对应关系

        芯片内部引脚和外部引脚也是默认连接的,也可以重新映射。默认对应的关系是:当不做任何设置时,控制GPIOHS0位高电平,则在IO16口会出现高电平。

('fm.fpioa.GPIOHS0', IO16)
('fm.fpioa.GPIOHS1', IO17)
('fm.fpioa.GPIOHS2', IO18)
('fm.fpioa.GPIOHS3', IO19)
('fm.fpioa.GPIOHS4', IO37)
('fm.fpioa.GPIOHS5', IO38)
('fm.fpioa.GPIOHS6', IO22)
('fm.fpioa.GPIOHS7', IO23)
('fm.fpioa.GPIOHS8', IO24)
('fm.fpioa.GPIOHS9', IO25)
('fm.fpioa.GPIOHS10', None)
('fm.fpioa.GPIOHS11', IO27)
('fm.fpioa.GPIOHS12', IO28)
('fm.fpioa.GPIOHS13', IO29)
('fm.fpioa.GPIOHS14', IO30)
('fm.fpioa.GPIOHS15', IO31)
('fm.fpioa.GPIOHS16', IO32)
('fm.fpioa.GPIOHS17', IO33)
('fm.fpioa.GPIOHS18', IO34)
('fm.fpioa.GPIOHS19', IO35)
('fm.fpioa.GPIOHS20', None)
('fm.fpioa.GPIOHS21', None)
('fm.fpioa.GPIOHS22', None)
('fm.fpioa.GPIOHS23', None)
('fm.fpioa.GPIOHS24', IO40)
('fm.fpioa.GPIOHS25', IO41)
('fm.fpioa.GPIOHS26', IO42)
('fm.fpioa.GPIOHS27', IO43)
('fm.fpioa.GPIOHS28', IO44)
('fm.fpioa.GPIOHS29', IO26)
('fm.fpioa.GPIOHS30', IO46)
('fm.fpioa.GPIOHS31', IO47)
('fm.fpioa.GPIO0', IO8)
('fm.fpioa.GPIO1', IO9)
('fm.fpioa.GPIO2', None)
('fm.fpioa.GPIO3', None)
('fm.fpioa.GPIO4', IO12)
('fm.fpioa.GPIO5', IO13)
('fm.fpioa.GPIO6', IO14)
('fm.fpioa.GPIO7', IO15)

映射的主要程序

映射一共有两种方法

1、就是利用

映射到通用GPIO

from Maix import GPIO # 调用GPIO模块 ,可以直接设置通用GPIO和高速GPIO
from board import board_info # 调用板载模块,可以直接控制板子引脚
from fpioa_manager import fm # FPIOA模块,可以控制内部引脚映射到外部引脚fm.register(board_info.LED_R,fm.fpioa.GPIO0)
fm.register(board_info.LED_R,fm.fpioa.GPIO1)
fm.register(board_info.LED_R,fm.fpioa.GPIO2)
fm.register(board_info.LED_R,fm.fpioa.GPIO3)
fm.register(board_info.LED_R,fm.fpioa.GPIO4)
fm.register(board_info.LED_R,fm.fpioa.GPIO5)
fm.register(board_info.LED_R,fm.fpioa.GPIO6)
fm.register(board_info.LED_R,fm.fpioa.GPIO7)led_r=GPIO(GPIO.GPIO7,GPIO.OUT) # 直接控制led_r的状态,即可以控制引脚
led_r=GPIO(GPIO.GPIO7,GPIO.IN) # 设置成输入模式led_r.value(0) # 输出低电平。
led_r.value(1) # 输出高电平。

2、利用FPIOA类配置重映射

from Maix import FPIOA 
from Maix import GPIO # 调用GPIO模块 ,可以直接设置通用GPIO和高速GPIO# 可以映射到片上外设 GPIOHS0~GPIOHS31
fpioa = FPIOA()# 均可以
fpioa.set_function(board_info.LED_B, fm.fpioa.GPIOHS31)
# 或者
fpioa.set_function(14, fm.fpioa.GPIOHS31)# 我的LED_B在引脚14上led_b=GPIO(GPIO.GPIOHS31,GPIO.OUT)其余控制,和通用GPIO一致

附  片内外设表 

        把set_function(pin, func) 里面的func替换成任意一个外设名称均可以重映射

外设功能(func)简要描述
JTAG_TCLKJTAG Test Clock
JTAG_TDIJTAG Test Data In
JTAG_TMSJTAG Test Mode Select
JTAG_TDOJTAG Test Data Out
SPI0_D0SPI0 Data 0
SPI0_D1SPI0 Data 1
SPI0_D2SPI0 Data 2
SPI0_D3SPI0 Data 3
SPI0_D4SPI0 Data 4
SPI0_D5SPI0 Data 5
SPI0_D6SPI0 Data 6
SPI0_D7SPI0 Data 7
SPI0_SS0SPI0 Chip Select 0
SPI0_SS1SPI0 Chip Select 1
SPI0_SS2SPI0 Chip Select 2
SPI0_SS3SPI0 Chip Select 3
SPI0_ARBSPI0 Arbitration
SPI0_SCLKSPI0 Serial Clock
UARTHS_RXUART High speed Receiver
UARTHS_TXUART High speed Transmitter
RESV6Reserved function
RESV7Reserved function
CLK_SPI1Clock SPI1
CLK_I2C1Clock I2C1
GPIOHS0GPIO High speed 0
GPIOHS1GPIO High speed 1
GPIOHS2GPIO High speed 2
GPIOHS3GPIO High speed 3
GPIOHS4GPIO High speed 4
GPIOHS5GPIO High speed 5
GPIOHS6GPIO High speed 6
GPIOHS7GPIO High speed 7
GPIOHS8GPIO High speed 8
GPIOHS9GPIO High speed 9
GPIOHS10GPIO High speed 10
GPIOHS11GPIO High speed 11
GPIOHS12GPIO High speed 12
GPIOHS13GPIO High speed 13
GPIOHS14GPIO High speed 14
GPIOHS15GPIO High speed 15
GPIOHS16GPIO High speed 16
GPIOHS17GPIO High speed 17
GPIOHS18GPIO High speed 18
GPIOHS19GPIO High speed 19
GPIOHS20GPIO High speed 20
GPIOHS21GPIO High speed 21
GPIOHS22GPIO High speed 22
GPIOHS23GPIO High speed 23
GPIOHS24GPIO High speed 24
GPIOHS25GPIO High speed 25
GPIOHS26GPIO High speed 26
GPIOHS27GPIO High speed 27
GPIOHS28GPIO High speed 28
GPIOHS29GPIO High speed 29
GPIOHS30GPIO High speed 30
GPIOHS31GPIO High speed 31
GPIO0GPIO pin 0
GPIO1GPIO pin 1
GPIO2GPIO pin 2
GPIO3GPIO pin 3
GPIO4GPIO pin 4
GPIO5GPIO pin 5
GPIO6GPIO pin 6
GPIO7GPIO pin 7
UART1_RXUART1 Receiver
UART1_TXUART1 Transmitter
UART2_RXUART2 Receiver
UART2_TXUART2 Transmitter
UART3_RXUART3 Receiver
UART3_TXUART3 Transmitter
SPI1_D0SPI1 Data 0
SPI1_D1SPI1 Data 1
SPI1_D2SPI1 Data 2
SPI1_D3SPI1 Data 3
SPI1_D4SPI1 Data 4
SPI1_D5SPI1 Data 5
SPI1_D6SPI1 Data 6
SPI1_D7SPI1 Data 7
SPI1_SS0SPI1 Chip Select 0
SPI1_SS1SPI1 Chip Select 1
SPI1_SS2SPI1 Chip Select 2
SPI1_SS3SPI1 Chip Select 3
SPI1_ARBSPI1 Arbitration
SPI1_SCLKSPI1 Serial Clock
SPI_SLAVE_D0SPI Slave Data 0
SPI_SLAVE_SSSPI Slave Select
SPI_SLAVE_SCLKSPI Slave Serial Clock
I2S0_MCLKI2S0 Master Clock
I2S0_SCLKI2S0 Serial Clock(BCLK)
I2S0_WSI2S0 Word Select(LRCLK)
I2S0_IN_D0I2S0 Serial Data Input 0
I2S0_IN_D1I2S0 Serial Data Input 1
I2S0_IN_D2I2S0 Serial Data Input 2
I2S0_IN_D3I2S0 Serial Data Input 3
I2S0_OUT_D0I2S0 Serial Data Output 0
I2S0_OUT_D1I2S0 Serial Data Output 1
I2S0_OUT_D2I2S0 Serial Data Output 2
I2S0_OUT_D3I2S0 Serial Data Output 3
I2S1_MCLKI2S1 Master Clock
I2S1_SCLKI2S1 Serial Clock(BCLK)
I2S1_WSI2S1 Word Select(LRCLK)
I2S1_IN_D0I2S1 Serial Data Input 0
I2S1_IN_D1I2S1 Serial Data Input 1
I2S1_IN_D2I2S1 Serial Data Input 2
I2S1_IN_D3I2S1 Serial Data Input 3
I2S1_OUT_D0I2S1 Serial Data Output 0
I2S1_OUT_D1I2S1 Serial Data Output 1
I2S1_OUT_D2I2S1 Serial Data Output 2
I2S1_OUT_D3I2S1 Serial Data Output 3
I2S2_MCLKI2S2 Master Clock
I2S2_SCLKI2S2 Serial Clock(BCLK)
I2S2_WSI2S2 Word Select(LRCLK)
I2S2_IN_D0I2S2 Serial Data Input 0
I2S2_IN_D1I2S2 Serial Data Input 1
I2S2_IN_D2I2S2 Serial Data Input 2
I2S2_IN_D3I2S2 Serial Data Input 3
I2S2_OUT_D0I2S2 Serial Data Output 0
I2S2_OUT_D1I2S2 Serial Data Output 1
I2S2_OUT_D2I2S2 Serial Data Output 2
I2S2_OUT_D3I2S2 Serial Data Output 3
RESV0Reserved function
RESV1Reserved function
RESV2Reserved function
RESV3Reserved function
RESV4Reserved function
RESV5Reserved function
I2C0_SCLKI2C0 Serial Clock
I2C0_SDAI2C0 Serial Data
I2C1_SCLKI2C1 Serial Clock
I2C1_SDAI2C1 Serial Data
I2C2_SCLKI2C2 Serial Clock
I2C2_SDAI2C2 Serial Data
CMOS_XCLKDVP System Clock
CMOS_RSTDVP System Reset
CMOS_PWDNDVP Power Down Mode
CMOS_VSYNCDVP Vertical Sync
CMOS_HREFDVP Horizontal Reference output
CMOS_PCLKPixel Clock
CMOS_D0Data Bit 0
CMOS_D1Data Bit 1
CMOS_D2Data Bit 2
CMOS_D3Data Bit 3
CMOS_D4Data Bit 4
CMOS_D5Data Bit 5
CMOS_D6Data Bit 6
CMOS_D7Data Bit 7
SCCB_SCLKSCCB Serial Clock
SCCB_SDASCCB Serial Data
UART1_CTSUART1 Clear To Send
UART1_DSRUART1 Data Set Ready
UART1_DCDUART1 Data Carrier Detect
UART1_RIUART1 Ring Indicator
UART1_SIR_INUART1 Serial Infrared Input
UART1_DTRUART1 Data Terminal Ready
UART1_RTSUART1 Request To Send
UART1_OUT2UART1 User-designated Output 2
UART1_OUT1UART1 User-designated Output 1
UART1_SIR_OUTUART1 Serial Infrared Output
UART1_BAUDUART1 Transmit Clock Output
UART1_REUART1 Receiver Output Enable
UART1_DEUART1 Driver Output Enable
UART1_RS485_ENUART1 RS485 Enable
UART2_CTSUART2 Clear To Send
UART2_DSRUART2 Data Set Ready
UART2_DCDUART2 Data Carrier Detect
UART2_RIUART2 Ring Indicator
UART2_SIR_INUART2 Serial Infrared Input
UART2_DTRUART2 Data Terminal Ready
UART2_RTSUART2 Request To Send
UART2_OUT2UART2 User-designated Output 2
UART2_OUT1UART2 User-designated Output 1
UART2_SIR_OUTUART2 Serial Infrared Output
UART2_BAUDUART2 Transmit Clock Output
UART2_REUART2 Receiver Output Enable
UART2_DEUART2 Driver Output Enable
UART2_RS485_ENUART2 RS485 Enable
UART3_CTSUART3 Clear To Send
UART3_DSRUART3 Data Set Ready
UART3_DCDUART3 Data Carrier Detect
UART3_RIUART3 Ring Indicator
UART3_SIR_INUART3 Serial Infrared Input
UART3_DTRUART3 Data Terminal Ready
UART3_RTSUART3 Request To Send
UART3_OUT2UART3 User-designated Output 2
UART3_OUT1UART3 User-designated Output 1
UART3_SIR_OUTUART3 Serial Infrared Output
UART3_BAUDUART3 Transmit Clock Output
UART3_REUART3 Receiver Output Enable
UART3_DEUART3 Driver Output Enable
UART3_RS485_ENUART3 RS485 Enable
TIMER0_TOGGLE1TIMER0 Toggle Output 1
TIMER0_TOGGLE2TIMER0 Toggle Output 2
TIMER0_TOGGLE3TIMER0 Toggle Output 3
TIMER0_TOGGLE4TIMER0 Toggle Output 4
TIMER1_TOGGLE1TIMER1 Toggle Output 1
TIMER1_TOGGLE2TIMER1 Toggle Output 2
TIMER1_TOGGLE3TIMER1 Toggle Output 3
TIMER1_TOGGLE4TIMER1 Toggle Output 4
TIMER2_TOGGLE1TIMER2 Toggle Output 1
TIMER2_TOGGLE2TIMER2 Toggle Output 2
TIMER2_TOGGLE3TIMER2 Toggle Output 3
TIMER2_TOGGLE4TIMER2 Toggle Output 4
CLK_SPI2Clock SPI2
CLK_I2C2Clock I2C2

http://www.ppmy.cn/news/110757.html

相关文章

K210使用和测试

B站链接: https://www.bilibili.com/video/BV1ET4y1c7rw/ CSDN文件下载: https://download.csdn.net/download/qq_38649386/12920715 目录 前言 4 1 Kendryte开发 5 1.1 IDE环境 5 1.2 开发使用 6 1.2.1 驱动安装 6 1.2.2 使用教程 6 1.3…

K210入门教程

前言 历经了电赛,视觉部分由于openmv高昂的价格难以承担,于是将目光转移到了K210身上,这块一二百块钱即可拥有神经网络的摄像头,拿它做点小项目练练手。 提示:以下是本篇文章正文内容,下面案例可供参考 一…

【爬虫第二章】网络协议和HTTP协议

预计更新 一、 爬虫技术概述 1.1 什么是爬虫技术 1.2 爬虫技术的应用领域 1.3 爬虫技术的工作原理 二、 网络协议和HTTP协议 2.1 网络协议概述 2.2 HTTP协议介绍 2.3 HTTP请求和响应 三、 Python基础 3.1 Python语言概述 3.2 Python的基本数据类型 3.3 Python的流程控制语句 …

Tomcat文件夹属性

Tomcat安装完成后,其安装目录下包含bin、conf、lib、logs、temp、webapps、work等子目录,各个子目录简介如下: (1)bin目录。主要存放Tomcat的命令文件。(解压缩版点击bin下的startup.bat,即可运…

MyBatis 环境搭建+基本使用

目录 MyBatis创建MyBatis环境搭建MyBatis模式开发MyBatis 获取动态参数(查询操作)${} 直接替换#{} 占位符模式替换like查询(模糊查询)多表查询一对一的表映射一对多的表映射 增、删、改操作改操作删除操作增加操作添加用户添加用户…

面向Java开发者的ChatGPT提示词工程(5)

GPT 的局限性 在探讨开发大型语言模型应用程序时,我们必须认识到 GPT 存在一些局限性。这些限制对于我们保持清醒的头脑至关重要。 尽管在 GP T的训练过程中融入了大量知识,但它并非能够完美地记住所见之物,并且对这些知识的边界了解有限。…

dxf文件解析,g代码解析,图片解析C#工程文件 可用于激光切割机,打印机,打码机,巡边机,点胶机等运动控制系统

dxf文件解析,g代码解析,图片解析C#工程文件 1.解析完成的图形坐标自动保存,通过通信接口直接下发即可 2.可用于激光切割机,打印机,打码机,巡边机,点胶机等运动控制系统 ID:48300065905135565…

在你可以执行与打印机有关的任务(例如页面设置或打印一个文档)之前,你必须已经安装打印机。你想现在安装打印机吗?

Powerdesigner 创建、打开工程提示"打印错误" 在你可以执行与打印机有关的任务(例如页面设晋或打印一个文档)之前,你必须已经安装打印机。你想现在安装打印机吗? 只需要将Print Spooler 服务启动即可。 服务启动步骤 1、Windows10 左下角搜索按钮点击输…