maixpy k210 GPIO操作

 

import time
from Maix import GPIO
from Maix import FPIOA
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)
#print(board_info.GPIOHS9)
'''
用fm(fpioa manager)这个内置的对象来注册芯片的外设和引脚的对应关系,
这里 fm.fpioa.GPIO0 是 K210 的一个 GPIO 外设
(注意区分 GPIO(外设) 和引脚(实实在在的硬件引脚)的区别 ),
所以把 fm.fpioa.GPIO0 注册到了 引脚 board_info.LED_R;
'''
fpioa = FPIOA()
fpioa.set_function(8,fpioa.GPIOHS8)
fpioa.set_function(9,fpioa.GPIOHS9)
#将LED外部IO注册到内部GPIO,K210引脚支持任意配置
'''
fm.register(12,fm.fpioa.GPIO0)
fm.register(13,fm.fpioa.GPIO1)
fm.register(14,fm.fpioa.GPIO2)
'''
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)
# 构造函数  fm.fpioa.GPIO0  重新命名的
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)

test_led1 = GPIO(GPIO.GPIOHS8,GPIO.OUT)
test_led2 = GPIO(GPIO.GPIOHS9,GPIO.OUT)

test_gpio=GPIO(GPIO.GPIOHS9,GPIO.OUT)

status = 0
for i in range(0, 200):
    led_r.value(status)#设置高低电平
    test_led1.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)

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

注意:

以下 GPIOHS 默认已经被使用, 程序中如非必要尽量不要使用:

GPIOHS功能
GPIOHS31LCD_DC
GPIOHS30LCD_RST
GPIOHS29SD_CS
GPIOHS28MIC_LED_CLK
GPIOHS27MIC_LED_DATA

1. 类 FPIOA

1.1. 方法

help(func)

显示外设及其简要描述

参数

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

返回

外设名及其简要描述

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)

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

2. 附录: 外设表

外设功能(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

 

GPIO

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

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

  • 高速 GPIO:

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

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

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

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

注意:

一下 GPIOHS 默认已经被使用, 程序中如非必要尽量不要使用:

GPIOHS功能
GPIOHS31LCD_DC
GPIOHS30LCD_RST
GPIOHS29SD_CS
GPIOHS28MIC_LED_CLK
GPIOHS27MIC_LED_DATA

1. 构造函数

class GPIO(ID, MODE, PULL, VALUE)

通过指定的参数新建一个 SPI 对象

1.1. 参数

  • ID: 使用的 GPIO 引脚(一定要使用 GPIO 里带的常量来指定)

  • MODE: GPIO模式

    • GPIO.IN就是输入模式

    • GPIO.OUT就是输出模式

  • PULL: GPIO上下拉模式

    • GPIO.PULL_UP 上拉

    ​• GPIO.PULL_DOWN 下拉

    ​• GPIO.PULL_NONE 即不上拉也不下拉

2. 方法

2.1. value

修改/读取 GPIO 引脚状态

GPIO.value([value])

参数

  • [value]: 可选参数,如果此参数不为空,则返回当前 GPIO 引脚状态

返回值

如果 [value] 参数不为空,则返回当前 GPIO 引脚状态

2.2. irq

配置一个中断处理程序,当 pin 的触发源处于活动状态时调用它。如果管脚模式为 pin.in,则触发源是管脚上的外部值。

GPIO.irq(CALLBACK_FUNC,TRIGGER_CONDITION,GPIO.WAKEUP_NOT_SUPPORT,PRORITY)

参数

  • CALLBACK_FUNC:中断回调函数,当中断触发的时候被调用,一个入口函数 pin_num

    ​• PIN_NUM 返回的是触发中断的 GPIO 引脚号(只有GPIOHS支持中断,所以这里的引脚号也是GPIOHS的引脚号)

  • TRIGGER_CONDITION:GPIO 引脚的中断触发模式

    ​• GPIO.IRQ_RISING 上升沿触发

    ​• GPIO.IRQ_FALLING 下降沿触发

    ​• GPIO.IRQ_BOTH 上升沿和下降沿都触发

返回值

2.3. disirq

关闭中断

GPIO.disirq()

参数

返回值

2.4. mode

GPIO模式

GPIO.mode(MODE)

参数

  • MODE

    GPIO.IN 就是输入模式

    GPIO.OUT 就是输出模式

返回值

2.5. pull

GPIO上下拉模式

GPIO.pull(PULL)

参数

  • PULL

    GPIO.IRQ_RISING 上升沿触发

    GPIO.IRQ_FALLING 下降沿触发

    GPIO.IRQ_BOTH 上升沿和下降沿都触发

返回值

3. 常量

  • GPIO0: GPIO0
  • GPIO1: GPIO1
  • GPIO2: GPIO2
  • GPIO3: GPIO3
  • GPIO4: GPIO4
  • GPIO5: GPIO5
  • GPIO6: GPIO6
  • GPIO7: GPIO7
  • GPIOHS0: GPIOHS0
  • GPIOHS1: GPIOHS1
  • GPIOHS2: GPIOHS2
  • GPIOHS3: GPIOHS3
  • GPIOHS4: GPIOHS4
  • GPIOHS5: GPIOHS5
  • GPIOHS6: GPIOHS6
  • GPIOHS7: GPIOHS7
  • GPIOHS8: GPIOHS8
  • GPIOHS9: GPIOHS9
  • GPIOHS10: GPIOHS10
  • GPIOHS11: GPIOHS11
  • GPIOHS12: GPIOHS12
  • GPIOHS13: GPIOHS13
  • GPIOHS14: GPIOHS14
  • GPIOHS15: GPIOHS15
  • GPIOHS16: GPIOHS16
  • GPIOHS17: GPIOHS17
  • GPIOHS18: GPIOHS18
  • GPIOHS19: GPIOHS19
  • GPIOHS20: GPIOHS20
  • GPIOHS21: GPIOHS21
  • GPIOHS22: GPIOHS22
  • GPIOHS23: GPIOHS23
  • GPIOHS24: GPIOHS24
  • GPIOHS25: GPIOHS25
  • GPIOHS26: GPIOHS26
  • GPIOHS27: GPIOHS27
  • GPIOHS28: GPIOHS28
  • GPIOHS29: GPIOHS29
  • GPIOHS30: GPIOHS30
  • GPIOHS31: GPIOHS31
  • GPIO.IN: 输入模式
  • GPIO.OUT: 输出模式
  • GPIO.PULL_UP: 上拉
  • GPIO.PULL_DOWN: 下拉
  • GPIO.PULL_NONE: 即不上拉也不下拉
  • GPIO.IRQ_RISING: 上升沿触发
  • GPIO.IRQ_FALLING:下降沿触发
  • GPIO.IRQ_BOTH: 上升沿和下降沿都触发

3.1. DEMO1: 点亮 LED

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

fm.register(board_info.LED_R,fm.fpioa.GPIO0)
led_r=GPIO(GPIO.GPIO0,GPIO.OUT)
utime.sleep_ms(500)
led_r.value()
fm.unregister(board_info.LED_R,fm.fpioa.GPIO0)

3.2. DEMO2: 按键按下点亮 LED

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

fm.register(board_info.LED_R,fm.fpioa.GPIO0)
led_b = GPIO(GPIO.GPIO0,GPIO.OUT)
led_b.value(1)

fm.register(board_info.BOOT_KEY, fm.fpioa.GPIOHS1)
key = GPIO(GPIO.GPIOHS1, GPIO.IN)

utime.sleep_ms(100)
while True:
    if key.value() == 0: # 等待按键按下
        led_b.value(0)
        utime.sleep_ms(1000)
        break
    utime.sleep_ms(10)


led_b.value(1)

fm.unregister(board_info.LED_R,fm.fpioa.GPIOHS0)
fm.unregister(board_info.BOOT_KEY,fm.fpioa.GPIOHS1)

3.3. DEMO3: 在 3 秒内等待按键触发中断

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

def test_irq(pin_num):
    print("key", pin_num, "\n")

fm.register(board_info.BOOT_KEY, fm.fpioa.GPIOHS0)
key = GPIO(GPIO.GPIOHS0, GPIO.IN, GPIO.PULL_NONE)

utime.sleep_ms(100)
key.irq(test_irq, GPIO.IRQ_BOTH, GPIO.WAKEUP_NOT_SUPPORT,7)
utime.sleep_ms(3000) # 在 3 秒内等待触发

key.disirq() # 禁用中断
fm.unregister(board_info.BOOT_KEY,fm.fpioa.GPIOHS0)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值