class Pin – 控制I/O引脚¶
Pin 对象用于控制 I/O 引脚(也称为 GPIO - 通用输入/输出)。Pin 对象通常与可以驱动输出电压和读取输入电压的物理引脚相关联。Pin 类有方法设置引脚的模式(输入、输出等)以及获取和设置数字逻辑电平的方法。对于引脚的模拟控制,请参见 ADC
类。
通过使用明确指定某个 I/O 引脚的标识符来构造 Pin 对象。标识符的允许形式和标识符映射到的物理引脚是特定于移植版本的。标识符的可能形式包括整数、字符串或带有移植版本和引脚号的元组。
使用模型:
from machine import Pin
# create an output pin on pin #0
p0 = Pin(0, Pin.OUT)
# set the value low then high
p0.value(0)
p0.value(1)
# create an input pin on pin #2, with a pull up resistor
p2 = Pin(2, Pin.IN, Pin.PULL_UP)
# read and print the pin value
print(p2.value())
# reconfigure pin #0 in input mode with a pull down resistor
p0.init(p0.IN, p0.PULL_DOWN)
# configure an irq callback
p0.irq(lambda p:print(p))
构造函数¶
- class machine.Pin(id, mode=-1, pull=-1, *, value=None, drive=0, alt=-1)¶
使用给定的
id
访问与之关联的引脚外设(GPIO 引脚)。如果在构造函数中给出了其他参数,则使用它们来初始化引脚。任何未指定的设置将保持其之前的状态。参数包括:
id
是必须的,可以是任意对象。可能的值类型包括:int(内部 Pin 标识符)、str(Pin 名称)和 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_UP
- 启用下拉电阻。
value
仅对 Pin.OUT 和 Pin.OPEN_DRAIN 模式有效,如果给出,则指定初始输出引脚值,否则引脚外设的状态保持不变。drive
指定引脚的输出功率,可以是:Pin.DRIVE_0
、Pin.DRIVE_1
等,驱动强度递增。实际的电流驱动能力取决于移植版本。并非所有移植版本都实现了这个参数。alt
为引脚指定一个替代功能,其可取的值取决于移植版本。此参数仅对Pin.ALT
和Pin.ALT_OPEN_DRAIN
模式有效。当一个引脚支持多于一个的替代功能时,可以使用它。如果只支持一个引脚替代功能,则不需要此参数。并非所有移植版本都实现了这个参数。
如上所述,Pin 类允许为特定引脚设置替代功能,但它不指定对这样的引脚的任何进一步操作。配置为替代功能模式的引脚通常不用作 GPIO,而是由其他硬件外设驱动。对这样的引脚唯一支持的操作是通过调用构造函数或
Pin.init()
方法重新初始化。如果配置为替代功能模式的引脚重新初始化为Pin.IN
、Pin.OUT
或Pin.OPEN_DRAIN
,则该引脚将移除替代功能。
方法¶
- Pin.init(mode=-1, pull=-1, *, value=None, drive=0, alt=-1)¶
使用给定的参数重新初始化引脚。只有指定的参数将被设置。引脚外设的其余状态将保持不变。有关参数的详细信息,请参见构造函数文档。
返回
None
。
- Pin.value([x])¶
此方法允许设置和获取引脚的值,这取决于是否提供了参数
x
。如果省略了参数,则此方法获取引脚的数字逻辑电平,返回 0 或 1,分别对应于低和高电压信号。此方法的行为取决于引脚的模式:
Pin.IN
- 该方法返回当前在引脚上存在的实际输入值。Pin.OUT
- 该方法的行为和返回值未定义。Pin.OPEN_DRAIN
- 如果引脚处于状态’0’,则该方法的行为和返回值未定义。否则,如果引脚处于状态’1’,该方法返回当前在引脚上存在的实际输入值。
如果提供了参数,则此方法设置引脚的数字逻辑电平。参数
x
可以是任何转换为布尔值的东西。如果它转换为True
,则引脚设置为状态’1’,否则设置为状态’0’。此方法的行为取决于引脚的模式:Pin.IN
- 值存储在引脚的输出缓冲区中。引脚状态不变,仍处于高阻抗状态。一旦将其更改为Pin.OUT
或Pin.OPEN_DRAIN
模式,存储的值将在引脚上变为活动状态。Pin.OUT
- 输出缓冲区立即设置为给定值。Pin.OPEN_DRAIN
- 如果值为’0’,则引脚设置为低电压状态。否则,引脚设置为高阻抗状态。
设置值时,此方法返回
None
。
- Pin.__call__([x])¶
Pin 对象是可调用的。调用方法提供了设置和获取引脚值的(快速)快捷方式。它等同于 Pin.value([x])。有关更多详细信息,请参见
Pin.value()
。
- Pin.on()¶
将引脚设置为“1”输出电平。
- Pin.off()¶
将引脚设置为“0”输出电平。
- Pin.irq(handler=None, trigger=Pin.IRQ_FALLING | Pin.IRQ_RISING, *, priority=1, wake=None, hard=False)¶
配置中断处理程序,当引脚的触发源激活时调用。如果引脚模式为
Pin.IN
,则触发源为引脚上的外部值。如果引脚模式为Pin.OUT
,则触发源就是引脚的输出缓冲区。否则,如果引脚模式为Pin.OPEN_DRAIN
,则触发源是状态’0’的输出缓冲区和状态’1’的外部引脚值。参数包括:
handler
是一个可选的函数,当中断触发时调用。处理程序必须准确地接受一个参数,即Pin
实例。trigger
配置可以生成中断的事件。可能的值包括:Pin.IRQ_FALLING
下降沿中断。Pin.IRQ_RISING
上升沿中断。Pin.IRQ_LOW_LEVEL
低电平中断。Pin.IRQ_HIGH_LEVEL
高电平中断。
这些值可以通过 OR 运算组合在一起以触发多个事件。
priority
设置中断的优先级。它可以取的值是特定于移植版本的,但更高的值总是代表更高的优先级。wake
选择此中断可以唤醒系统的电源模式。它可以是machine.IDLE
、machine.SLEEP
或machine.DEEPSLEEP
。这些值也可以通过 OR 运算组合在一起,使一个引脚在多个电源模式中生成中断。hard
如果为真,则使用硬件中断。这减少了引脚变化和调用处理程序之间的延迟。硬中断处理程序不得分配内存;参见 编写中断处理程序。并非所有移植版本都支持此参数。
此方法返回一个回调对象。
以下方法不是核心 Pin API 的一部分,只在某些移植版本上实现。
- Pin.low()¶
将引脚设置为“0”输出电平。
可用性:nrf, rp2, stm32 移植版本。
- Pin.high()¶
将引脚设置为“1”输出电平。
可用性:nrf, rp2, stm32 移植版本。
- Pin.mode([mode])¶
获取或设置引脚模式。有关
mode
参数的详细信息,请参见构造函数文档。可用性:cc3200, stm32 移植版本。
- Pin.pull([pull])¶
获取或设置引脚的上拉状态。有关
pull
参数的详细信息,请参见构造函数文档。可用性:cc3200, stm32 移植版本。
- Pin.drive([drive])¶
获取或设置引脚的驱动强度。有关
drive
参数的详细信息,请参见构造函数文档。可用性:cc3200移植版本。
常量¶
以下常量用于配置Pin对象。请注意,并非所有常量在所有移植版本上都可用。