class Pin -- 控制 I/O 引脚

引脚对象用于控制 I/O 引脚(也称为 GPIO——通用输入/输出)。引脚对象通常与某个物理引脚相关联,该引脚可以驱动输出电压并读取输入电压。引脚类提供了设置引脚模式(IN、OUT 等)的方法,以及获取和设置数字逻辑电平的方法。要对引脚进行模拟控制,请参阅 ADC 类。

引脚对象通过一个明确指定某个特定 I/O 引脚的标识符来构造。标识符的允许形式以及标识符所映射到的物理引脚均与具体端口有关。标识符的可能形式包括整数、字符串或包含端口和引脚编号的元组。

使用模型:

from machine import Pin

# create an output pin on header pin P0
p0 = Pin("P0", Pin.OUT)

# set the value low then high
p0.value(0)
p0.value(1)

# create an input pin on header pin P2, with a pull-up resistor
p2 = Pin("P2", Pin.IN, Pin.PULL_UP)

# read and print the pin value
print(p2.value())

# reconfigure P0 in input mode with a pull-down resistor
p0.init(p0.IN, p0.PULL_DOWN)

# install an IRQ callback
p0.irq(lambda p: print(p))

构造函数

class machine.Pin(id: int | str, mode: int = -1, pull: int = -1, *, value: Any = None, drive: int = 0, alt: int = -1)

访问与给定 id 相关联的引脚外设(GPIO 引脚)。如果在构造函数中给出了额外的参数,则这些参数将用于初始化该引脚。任何未指定的设置都将保持其先前的状态。

参数如下:

  • id 是必需的,可以是任意对象。可能的取值类型包括:int(内部引脚标识符)、str(引脚名称)以及 tuple([port, pin] 的二元组)。

  • mode 指定引脚模式,可以是以下之一:

    • Pin.IN - 引脚配置为输入。如果将其视为输出,则该引脚处于高阻态。

    • Pin.OUT - 引脚配置为(普通)输出。

    • Pin.OPEN_DRAIN - 引脚配置为开漏输出。开漏输出的工作方式如下:如果输出值设置为 0,则引脚处于低电平有效状态;如果输出值为 1,则引脚处于高阻态。并非所有端口都实现此模式,或者某些端口可能仅在特定引脚上实现。

    • Pin.ALT - 引脚配置为执行某个备用功能,该功能与具体端口有关。对于以这种方式配置的引脚,任何其他 Pin 方法(除 Pin.init() 外)均不适用(调用它们将导致未定义或与硬件相关的结果)。并非所有端口都实现此模式。

    • Pin.ALT_OPEN_DRAIN - 与 Pin.ALT 相同,但引脚配置为开漏。并非所有端口都实现此模式。

    • Pin.ANALOG - 引脚配置为模拟输入,参阅 ADC 类。

  • pull 指定引脚是否连接了(弱)上拉/下拉电阻,可以是以下之一:

    • None - 无上拉或下拉电阻。

    • Pin.PULL_UP - 启用上拉电阻。

    • Pin.PULL_DOWN - 启用下拉电阻。

  • value 仅对 Pin.OUT 和 Pin.OPEN_DRAIN 模式有效,如果给出,则指定初始输出引脚值;否则引脚外设的状态保持不变。

  • drive 指定引脚的输出功率,可以是以下之一:Pin.DRIVE_0Pin.DRIVE_1 等,驱动强度依次递增。实际的电流驱动能力取决于具体端口。并非所有端口都实现此参数。

  • alt 为引脚指定一个备用功能,其可取的值取决于具体端口。此参数仅对 Pin.ALTPin.ALT_OPEN_DRAIN 模式有效。当一个引脚支持多个备用功能时可以使用它。如果只支持一个引脚备用功能,则不需要此参数。并非所有端口都实现此参数。

如上所述,Pin 类允许为特定引脚设置备用功能,但它不指定对此类引脚的任何进一步操作。配置为备用功能模式的引脚通常不用作 GPIO,而是由其他硬件外设驱动。对此类引脚支持的唯一操作是重新初始化,方法是调用构造函数或 Pin.init() 方法。如果将配置为备用功能模式的引脚用 Pin.INPin.OUTPin.OPEN_DRAIN 重新初始化,则备用功能将从该引脚上移除。

方法

init(mode: int = -1, pull: int = -1, *, value: Any = None, drive: int = 0, alt: int = -1) None

使用给定的参数重新初始化引脚。只有指定的参数会被设置。引脚外设的其余状态将保持不变。有关参数的详细信息,请参阅构造函数文档。

返回 None

value(x: Any = None, /) int | None

此方法用于设置和获取引脚的值,具体取决于是否提供了参数 x

如果省略该参数,则此方法获取引脚的数字逻辑电平,返回 0 或 1,分别对应低电压和高电压信号。此方法的行为取决于引脚的模式:

  • Pin.IN - 该方法返回引脚上当前实际存在的输入值。

  • Pin.OUT - 该方法的行为和返回值是未定义的。

  • Pin.OPEN_DRAIN - 如果引脚处于状态 '0',则该方法的行为和返回值是未定义的。否则,如果引脚处于状态 '1',则该方法返回引脚上当前实际存在的输入值。

如果提供了该参数,则此方法设置引脚的数字逻辑电平。参数 x 可以是任何可转换为布尔值的对象。如果它转换为 True,则引脚被设置为状态 '1',否则被设置为状态 '0'。此方法的行为取决于引脚的模式:

  • Pin.IN - 该值存储在引脚的输出缓冲区中。引脚状态不变,仍保持高阻态。一旦引脚切换到 Pin.OUTPin.OPEN_DRAIN 模式,存储的值就会在引脚上生效。

  • Pin.OUT - 输出缓冲区立即被设置为给定的值。

  • Pin.OPEN_DRAIN - 如果值为 '0',则引脚被设置为低电压状态。否则引脚被设置为高阻态。

设置值时,此方法返回 None

__call__(x: Any = None, /) int | None

Pin 对象是可调用的。调用方法提供了一个(快速的)设置和获取引脚值的快捷方式。它等同于 Pin.value([x])。更多详情请参阅 Pin.value()

on() None

将引脚设置为 "1" 输出电平。

off() None

将引脚设置为 "0" 输出电平。

irq(handler: Callable[[Pin], None] | None = None, trigger: int = Pin.IRQ_FALLING | Pin.IRQ_RISING, *, priority: int = 1, wake: int | None = None, hard: bool = False) None

配置一个中断处理程序,当引脚的触发源处于活动状态时调用该处理程序。如果引脚模式为 Pin.IN,则触发源是引脚上的外部值。如果引脚模式为 Pin.OUT,则触发源是引脚的输出缓冲区。否则,如果引脚模式为 Pin.OPEN_DRAIN,则状态 '0' 的触发源是输出缓冲区,状态 '1' 的触发源是引脚外部值。

参数如下:

  • handler 是一个可选函数,当中断触发时被调用。该处理程序必须恰好接受一个参数,即 Pin 实例。

  • trigger 配置可以生成中断的事件。可能的值有:

    • Pin.IRQ_FALLING 在下降沿触发中断。

    • Pin.IRQ_RISING 在上升沿触发中断。

    这些值可以通过 OR 运算组合在一起,以便在多个事件上触发。

  • priority 设置中断的优先级。它可取的值与具体端口有关,但更高的值始终代表更高的优先级。

  • wake 选择此中断可以唤醒系统的电源模式。任何 OpenMV 端口都不支持;请保持默认值。

  • hard 如果为 true,则使用硬件中断。这减少了引脚变化与处理程序被调用之间的延迟。硬中断处理程序不得分配内存;参阅 编写中断处理程序。并非所有端口都支持此参数。

此方法返回一个回调对象。

以下方法是对核心 Pin API 的扩展。它们按端口可用性分组。

所有 OpenMV 端口上均可用的方法

low() None

将引脚设置为 "0" 输出电平。是 off() 的别名。

high() None

将引脚设置为 "1" 输出电平。是 on() 的别名。

仅限 mimxrt + alif

toggle() None

翻转输出引脚——将 "0" 翻转为 "1" 或反之。在 STM32 上未提供(如果在 STM32 上需要此功能,请使用 value(not value()))。

仅限 STM32

mode(mode: int | None = None, /) int
mode(mode: int, /) None

获取或设置引脚模式。有关 mode 参数的详细信息,请参阅构造函数文档。

pull(pull: int | None = None, /) int
pull(pull: int, /) None

获取或设置引脚的上拉/下拉状态。有关 pull 参数的详细信息,请参阅构造函数文档。

常量

下面的常量用于通过构造函数、init()irq() 配置 Pin 对象。它们按端口可用性分组。

所有 OpenMV 端口上均可用的常量

IN: int

引脚模式:高阻数字输入。

OUT: int

引脚模式:推挽数字输出。在 STM32 上是 OUT_PP 的别名。

OPEN_DRAIN: int

引脚模式:开漏输出。驱动 0 将线路拉低;驱动 1 将其释放为高阻态。

PULL_UP: int

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

PULL_DOWN: int

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

IRQ_FALLING: int

传递给 irq() 以在下降沿触发。

IRQ_RISING: int

传递给 irq() 以在上升沿触发。

仅限 STM32

ALT: int

引脚模式:备用功能(推挽)。与 alt= 一起使用以选择引脚路由到哪个外设功能。是 AF_PP 的别名。

ALT_OPEN_DRAIN: int

引脚模式:备用功能(开漏)。是 AF_OD 的别名。

ANALOG: int

引脚模式:模拟输入——数字输入/输出缓冲区被断开,因此引脚可以由 ADC 通道驱动。

AF_PP: int

备用功能推挽模式(与 ALT 值相同)。

AF_OD: int

备用功能开漏模式(与 ALT_OPEN_DRAIN 值相同)。

OUT_PP: int

推挽输出模式(与 OUT 值相同)。

OUT_OD: int

开漏输出模式(与 OPEN_DRAIN 值相同)。

PULL_NONE: int

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

仅限 mimxrt

PULL_UP_47K: int

启用约 47 kΩ 的内部上拉电阻。

PULL_UP_22K: int

启用约 22 kΩ 的内部上拉电阻。

PULL_HOLD: int

启用焊盘的总线保持器/保持功能——引脚锁存其当前逻辑电平而不是浮空。

DRIVE_OFF: int

禁用引脚输出驱动器。

DRIVE_0: int

最低驱动强度设置(最高串联阻抗)——即 R0 基准(3.3 V 时约 150 Ω / 1.8 V 时约 260 Ω)。

DRIVE_1: int

DRIVE_0 高一档的驱动强度。

DRIVE_2: int

DRIVE_0 高两档的驱动强度。

DRIVE_3: int

DRIVE_0 高三档的驱动强度(输出引脚的默认值)。

DRIVE_4: int

DRIVE_0 高四档的驱动强度。

DRIVE_5: int

DRIVE_0 高五档的驱动强度。

DRIVE_6: int

最强驱动强度设置。