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" 直接传递给映射器。

以下顺序决定了名称如何映射到物理引脚:

  1. 直接传入一个 Pin 对象。

  2. 用户提供的映射函数返回一个引脚。

  3. 用户提供的字典中包含匹配的键。

  4. 字符串匹配某个开发板引脚名称(P0P1、...)。

  5. 字符串匹配某个 CPU 端口/引脚名称(A0B7、...)。

调用 pyb.Pin.debug(True) 可打印关于每个对象如何映射到引脚的诊断信息。

构造函数

class pyb.Pin(id: str | Pin, *args, **kwargs)

创建一个与给定 id 关联的新 Pin 对象。如果提供了额外的参数,它们会被转发给 Pin.init() 以配置该引脚。

类方法

classmethod debug(state: bool | None = None) bool | None

获取或设置调试状态(TrueFalse 表示开启或关闭)。

classmethod dict(dict: dict | None = None) dict | None

获取或设置引脚映射器字典。

classmethod mapper(fun: Callable[[str], Pin] | None = None) Callable[[str], Pin] | None

获取或设置引脚映射器函数。

方法

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_UPPin.PULL_DOWN 上下拉模式时,该引脚会分别通过一个内部电阻(通常为几十 kOhm —— 请参阅所用 OpenMV Cam 对应 STM32 数据手册中的电气特性)被拉至 3V3 或 GND。

  • value 如果不为 None,则会在启用引脚之前设置端口的输出值。

  • alt 可在 mode 为 Pin.ALTPin.AF_PPPin.AF_OD 时使用,用于设置与引脚关联的某个复用功能的索引或名称。此参数以前称为 af,如有需要仍可使用。

value(value: Any | None = None) int | None

获取或设置引脚的数字逻辑电平:

  • 不带参数时,根据引脚的逻辑电平返回 0 或 1。

  • 给定 value 时,设置引脚的逻辑电平。value 可以是任何可转换为布尔值的内容。如果它转换为 True,则引脚被置为高电平,否则置为低电平。

__str__() str

返回描述该引脚对象的字符串。

af() int

返回引脚当前配置的复用功能。返回的整数将匹配 init 函数 af 参数所允许的常量之一。

af_list() List[PinAF]

返回该引脚可用的复用功能数组。

gpio() int

返回与该引脚关联的 GPIO 模块的基地址。

mode() int

返回引脚当前配置的模式。返回的整数将匹配 init 函数 mode 参数所允许的常量之一。

name() str

获取引脚名称。

names() List[str]

返回该引脚的 cpu 和 board 名称。

pin() int

获取引脚编号。

port() int

获取引脚端口。

pull() int

返回引脚当前配置的上下拉。返回的整数将匹配 init 函数 pull 参数所允许的常量之一。

常量

IN: int

将引脚配置为数字输入(高阻态)。

OUT_PP: int

将引脚配置为带推挽驱动器的数字输出。

OUT_OD: int

将引脚配置为带开漏驱动器的数字输出。

ANALOG: int

将引脚配置为模拟输入(例如与 ADC 配合使用)。

ALT: int

将引脚配置为复用功能(输入或输出)。

AF_PP: int

将引脚配置为带推挽驱动器的复用功能。

AF_OD: int

将引脚配置为带开漏驱动器的复用功能。

PULL_NONE: int

禁用引脚上的上拉和下拉电阻。

PULL_UP: int

启用引脚上的内部上拉电阻。

PULL_DOWN: int

启用引脚上的内部下拉电阻。