当前位置: 首页 > 工具软件 > pyboard > 使用案例 >

12 MicroPython之GPIO 通用型输入输出(基于pyboard)(二)

贺立果
2023-12-01

MicroPython之GPIO 通用型输入输出(基于pyboard)(二)

   pyboardGPIO操作,通过pyb.Pin类完成。上篇博客介绍了PIN类。本次就来看看GPIO的具体使用例子。首先说明,在pyb.Pin类中定了所有的引脚名,而且有两种方式,pyb.Pin.cpu.Namepyb.Pin.board.Name,说说这两种方式的区别。

   - pyb.Pin.cpu.Name:顾名思义,针对cpu定义的。例如,pyb.Pin.cpu.A0为芯片GPIOA0输出口。
   - pyb.Pin.board.Name:顾名思义,针对pyboard定义的。例如,pyb.Pin.board.X1表示是pyboard板子上的X1接口,该X1接口实际连接在芯片GPIOA0输出口。所以pyb.Pin.cpu.A0pyb.Pin.board.X1是同一个接口。

基本使用

   好了,来看看具体是怎么定义引脚的:

import pyb
x1_pin = pyb.Pin.board.X1
g = pyb.Pin(pyb.Pin.board.X1, pyb.Pin.IN)

   所以上面的g定义为pyboard上面的X1引脚,实际上就是芯片的A0引脚,并且设置为输入模式。也可以简单地写为:

import pyb
g = pyb.Pin('X1', pyb.Pin.OUT_PP)    # 底层是通过 'Pin.dict([fun])' 实现的

或者

import pyb
g = pyb.Pin('pyb.Pin.cpu.A0', pyb.Pin.OUT_PP)

自定义引脚名称

   自定义引脚名称可以通过字典方式,即Pin.dict([dict]) 和映射函数方式Pin.mapper([fun]),这两个函数都是Pin类的静态函数。

字典方式
import pyb
MyMapperDict = { 'LeftMotorDir' : pyb.Pin.cpu.C12 }
pyb.Pin.dict(MyMapperDict)
g = pyb.Pin("LeftMotorDir", pyb.Pin.OUT_OD)

   字典方式很简单,只需要定义一个python字典,键为自己取得名字,值为对应的引脚名,可以采用pyb.Pin.cpu.Namepyb.Pin.board.Name。这个和C语言中的宏定义差不多。当然,也可以查询自定义的引脚名称:

pin = pyb.Pin("LeftMotorDir")
映射函数方式
import pyb
def MyMapper(pin_name):
   if pin_name == "LeftMotorDir":
       return pyb.Pin.cpu.A0

pyb.Pin.mapper(MyMapper)
g = pyb.Pin("LeftMotorDir", pyb.Pin.OUT_OD)

   映射函数方式的套路都是一样的,用if判断完成。调用pyb.Pin(),会将第一个参数传入映射函数中,获取真正对应的引脚。概括一下,指定引脚总共5种方式:

  1. 直接指定引脚名字,包括pyb.Pin.cpu.Namepyb.Pin.board.Name
  2. 用户自定义映射函数方式,如上示例
  3. 用户自定义字典方式,如上示例
  4. 提供一个基于板子符号的字符串,例如'X1'
  5. 提供一个基于cpu符号的字符串,例如'A0'
摘自官网说明

   可以使用pyb.Pin.debug(True)这个去查看Pin是怎么通过映射找到对应的引脚的。
   Pin.PULL_UPPin.PULL_DOWN如果使能,则相当于通过一个40k欧姆的电阻分别上拉到3.3V 和下拉到GND。但是引脚Y5是通过11k 欧姆电阻上下拉的。
   每当GPIO引脚上出现下降缘时,就会执行回调。注意:机械按钮有“抖动”,按下或释放开关往往会产生多个边缘。这个也是在嵌入式开发中最基本的问题,需要进行消抖。

 类似资料: