Maixpy 学习之路

  • K210 FPIOA简述
  • 测试代码(led灯)
  • K210 GPIO简述
  • 关于类GPIO
  • 关于K210的GPIO
  • 关于类fpioa_manager(现场可编程 IO 阵列, Field Programmable Input and Output Array)
  • 关于类FPIOA
  • 方法(fuction)
  • set_function(pin, func)
  • 关于全局变量board_info
  • 关于类fpioa_manager
  • get_Pin_num(func)
  • 外设表



FPIOA是映射登记,GPIO是软定义的引脚接口

K210 FPIOA简述

K210上的物理引脚通过FPIOA功能来映射到GPIO,物理引脚共有48个对应于原理图上的IO0~IO47,可以将GPIO(分为通用和高速)任意分配给这些引脚,接下来介绍如何将GPIO接口分配给这些物理引脚。

设置SystemUivisibility 设置pin是什么意思_引脚

测试代码(led灯)

先运行测试代码,实现三色灯的循环流水灯效果。

import time
from Maix import GPIO
from fpioa_manager import fm
from board import board_info

# see board/readme.md to config your sipeed's hardware.
print(board_info.LED_R)
print(board_info.LED_G)
print(board_info.LED_B)

fm.register(board_info.LED_R, fm.fpioa.GPIO0, force=True)
fm.register(board_info.LED_G, fm.fpioa.GPIOHS0, force=True)
fm.register(board_info.LED_B, fm.fpioa.GPIO2, force=True)
fm.register(board_info.BOOT_KEY, fm.fpioa.GPIO3, force=True)

led_r = GPIO(GPIO.GPIO0, GPIO.OUT)
led_g = GPIO(GPIO.GPIOHS0, GPIO.OUT)
led_b = GPIO(GPIO.GPIO2, GPIO.OUT)
key_input = GPIO(GPIO.GPIO3, GPIO.IN)

status = 0
for i in range(0, 20):
    led_r.value(status)
    time.sleep_ms(300)
    led_g.value(status)
    time.sleep_ms(300)
    led_b.value(status)
    time.sleep_ms(300)
    status = 0 if (status == 1) else 1
    time.sleep_ms(300)
    print("LED RGB(%d,%d,%d)" % (led_r.value(), led_g.value(), led_b.value()))
    time.sleep_ms(100)
    print("key_input:", key_input.value())

fm.unregister(board_info.LED_R)
fm.unregister(board_info.LED_G)
fm.unregister(board_info.LED_B)
fm.unregister(board_info.BOOT_KEY)

对比以下代码,我们可以看到borad_info的地方更显着是宏定义接口

import time
from Maix import GPIO
from fpioa_manager import fm
from board import board_info

print(board_info.LED_R)
print(board_info.LED_G)
print(board_info.LED_B)
print(board_info.BOOT_KEY)

fm.register(14, fm.fpioa.GPIO1, force=True)   //broad_info只是助记符
fm.register(16, fm.fpioa.GPIO3, force=True)

led_r = GPIO(GPIO.GPIO1, GPIO.OUT)
key_input = GPIO(GPIO.GPIO3, GPIO.IN)

status = 0
for i in range(0, 20):
    led_r.value(status)
    time.sleep_ms(300)

    status = 0 if (status == 1) else 1
    time.sleep_ms(300)
    print("LED RGB(%d)" % (led_r.value()))
    time.sleep_ms(100)
    print("key_input:", key_input.value())

K210 GPIO简述

平时我们在单片机上是这样定义GPIO =General Purpose Input Output (通用输入/输出)简称为 GPIO,或总线扩展器。
相对于fpioa来说GPIO是映射以后的,是一个宏定义的接口,不是硬件上的接口

关于类GPIO

可以通过构造函数来新建对象
led_r=GPIO()
关于函数:class GPIO(ID,MODE,PULL,VALUE)
注意:这里的上拉和下拉在输入模式才可以配置
ID:使用的GPIO引脚(一定要使用GPIO里带的常量来指定)
MODE:GPIO模式
GPIO.IN就是输入模式 GPIO.OUT就是输出模式
PULL:GPIO上下拉模式
GPIO.PULL_UP上拉 GPIO.PULL_DOWN下拉 GPIO.PULL_NONE即不上拉也不下拉

也可以通过入参构造函数来新建一个对象比如:
    led_r=GPIO(GPIO.GPIO0,GPIO.OUT)

这样你就可以通过led_r这个对象来修改和查询对应的接口了。(比如说我可以通过led_r修改GPIO0的输出值也可以给它配置一个外部中断服务函数(前提他的模式式输入的情况下,现在是输出))

关于K210的GPIO

K210的GPIO分为高速GPIO(GPIOHS)和通用GPIO(GPIO)区别如下:

设置SystemUivisibility 设置pin是什么意思_引脚_02

下面是Maix系列开发板已经被使用的GPIOHS(高速GPIO)

设置SystemUivisibility 设置pin是什么意思_引脚_03

关于类fpioa_manager(现场可编程 IO 阵列, Field Programmable Input and Output Array)

K210 支持每个外设随意映射到任意引脚, 使用 FPIOA 功能来实现。

关于类FPIOA

方法(fuction)

help(func)
显示外设及其简要描述
参数

func: 外设名(功能/编号),可以不传参, 则以表格的形式显示所有外设名即简要描述,这个表格也可以在本页的末尾找到(附录:外设表);</br> 如果传参,则传一个整型值, 找到该编号对应的外设后会打印外设名和描述,</br> 比如 FPIOA.JTAG_TCLK 或者 fm.fpioa.JTAG_TCLK(fm在本页后面介绍) 或者 0

比如:

from Maix import FPIOA

fpioa = FPIOA()
fpioa.help()
fpioa.help(0)
fpioa.help(fpioa.JTAG_TCLK)
fm.fpioa.help()
fm.fpioa.help(fm.fpioa.JTAG_TCLK)

输出的结果是

设置SystemUivisibility 设置pin是什么意思_整型_04

返回的都是一些外设的介绍和简要的介绍描述

set_function(pin, func)
设置引脚对应的外设功能, 即引脚映射

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

from Maix import FPIOA
from board import board_info
from fpioa_manager import fm
fpioa = FPIOA()
fpioa.set_function(board_info.LED_G, fm.fpioa.GPIOHS0)

这里面会牵扯关于全局变量board_info,下面插播介绍以下board_info和类fpioa_manager

关于全局变量board_info

主要用于方便用户使用开发板引脚配置,其中内置了对人友好的命名及接口,可以使用户减少对电器连接原理图的依赖。

board_info.LED_G代表LED_G所连接引脚的编号。

:  在你忘记引脚名称的时候你可以使用内置的方法来查表:
     board_info.pin_map()
     也别忘了,在编程开始时加入
from board import board_info

关于类fpioa_manager

fpioa_manager:简称fm,该模块用于注册芯片内部功能和引脚,帮助用户管理内部功能和引脚
fm 实际上是使用 Fpioa_Manager 类定义的一个对象, 使用 Micropython 编写并集成带固件中
所以我们可以直接使用已经定义的对象fm进行操作。

fpioa_manager类中的主要方法包含了注册和注销函数的功能:
这两个函数可以将物理引脚对应上GPIO接口

注册函数:

    fm.register(pin,function,[force=True])

    注销函数:

    fm.unregister(pin,function)

 它们的参数表:


设置SystemUivisibility 设置pin是什么意思_全局变量_05

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")

我们通过这个方法再次校验一下,我们对GPIO的使用是否正常。

设置SystemUivisibility 设置pin是什么意思_整型_06

外设表

https://cn.maixpy.sipeed.com/zh/api_reference/Maix/fpioa.html#%E9%99%84%E5%BD%95%EF%BC%9A-%E5%A4%96%E8%AE%BE%E8%A1%A8