class Pin -- 控制 I/O 引脚¶
Pin 对象表示 STM32 上的单个 GPIO。它提供了配置引脚模式(输入、输出、复用功能、模拟)和上下拉电阻的方法,并可读取或驱动其数字电平。关于模拟采样请参阅 pyb.ADC;关于复用功能枚举请参阅 PinAF。
所有排针引脚都预定义为 pyb.Pin.board.<name>。大多数 STM32 OpenMV Cam 提供 I/O 排针引脚 P0 ... P9;OpenMV Cam N6 则额外提供最多到 P18 的引脚:
p0 = pyb.Pin.board.P0
g = pyb.Pin(pyb.Pin.board.P0, pyb.Pin.IN)
底层的 STM32 端口/引脚也可以通过 pyb.Pin.cpu.<name> 直接寻址,其命名方式为端口字母后跟引脚编号(例如 pyb.Pin.cpu.A0)。每个 OpenMV 排针引脚到 CPU 引脚的映射由开发板固定。
引脚也可以通过字符串名称选择:
g = pyb.Pin("P0", pyb.Pin.OUT_PP)
可以使用 Pin.dict() 添加用户自定义的名称:
MyMapperDict = {"LeftMotorDir": pyb.Pin.cpu.A0}
pyb.Pin.dict(MyMapperDict)
g = pyb.Pin("LeftMotorDir", pyb.Pin.OUT_OD)
并可反过来查询:
pin = pyb.Pin("LeftMotorDir")
或者,可以使用 Pin.mapper() 安装自定义的映射函数:
def MyMapper(pin_name):
if pin_name == "LeftMotorDir":
return pyb.Pin.cpu.A0
pyb.Pin.mapper(MyMapper)
因此调用 pyb.Pin("LeftMotorDir", pyb.Pin.OUT_PP) 会将 "LeftMotorDir" 直接传递给映射器。
以下顺序决定了名称如何映射到物理引脚:
直接传入一个
Pin对象。用户提供的映射函数返回一个引脚。
用户提供的字典中包含匹配的键。
字符串匹配某个开发板引脚名称(
P0、P1、...)。字符串匹配某个 CPU 端口/引脚名称(
A0、B7、...)。
调用 pyb.Pin.debug(True) 可打印关于每个对象如何映射到引脚的诊断信息。
构造函数¶
- class pyb.Pin(id: str | Pin, *args, **kwargs)¶
创建一个与给定
id关联的新 Pin 对象。如果提供了额外的参数,它们会被转发给Pin.init()以配置该引脚。类方法¶
方法¶
- init(mode: int, pull: int = Pin.PULL_NONE, *, value: int | None = None, alt: int | str = -1) None¶
初始化引脚:
mode 可以是以下之一:
Pin.IN—— 将引脚配置为输入;Pin.OUT_PP—— 将引脚配置为输出,采用推挽控制;Pin.OUT_OD—— 将引脚配置为输出,采用开漏控制;Pin.ALT—— 将引脚配置为复用功能,输入或输出;Pin.AF_PP—— 将引脚配置为复用功能,推挽;Pin.AF_OD—— 将引脚配置为复用功能,开漏;Pin.ANALOG—— 将引脚配置为模拟。
pull 可以是以下之一:
Pin.PULL_NONE—— 无上拉或下拉电阻;Pin.PULL_UP—— 启用上拉电阻;Pin.PULL_DOWN—— 启用下拉电阻。
当引脚启用了
Pin.PULL_UP或Pin.PULL_DOWN上下拉模式时,该引脚会分别通过一个内部电阻(通常为几十 kOhm —— 请参阅所用 OpenMV Cam 对应 STM32 数据手册中的电气特性)被拉至 3V3 或 GND。value 如果不为 None,则会在启用引脚之前设置端口的输出值。
alt 可在 mode 为
Pin.ALT、Pin.AF_PP或Pin.AF_OD时使用,用于设置与引脚关联的某个复用功能的索引或名称。此参数以前称为af,如有需要仍可使用。
常量¶