.. currentmodule:: machine .. _machine.Pin: Pin类 -- 控制I/O引脚 ============================= 引脚对象用于控制I/O引脚(也称为GPIO—通用输入/输出)。Pin对象通常与一个可驱动输出电压和读取输入电压的引脚相关联。 引脚类有设置引脚模式(IN、OUT等)的方法,以及设置数字逻辑的方法。对引脚的模拟控制,请参见 :class:`ADC` 类。 引脚对象通过使用明确指定某个I/O引脚的标识符来构建。每一个标识符都对应到一个引脚,标识符可能是整数、字符串或者一个带有端口和引脚号的元组。 例子:: from machine import Pin # create an output pin on pin #0 在引脚#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 在引脚#2上创建一个带有上拉电阻的输入引脚 p2 = Pin(2, Pin.IN, Pin.PULL_UP) # read and print the pin value 读取并打印引脚值 print(p2.value()) # reconfigure pin #0 in input mode 在输入模式下重新配置引脚#0 p0.mode(p0.IN) # configure an irq callback 配置一个irq回调 p0.irq(lambda p:print(p)) 构造函数 ------------ .. class:: Pin(id, mode=-1, pull=-1, \*, value, drive, alt) 访问与给定 ``id`` 相关联的外围引脚(GPIO引脚)。若在构造函数中给出了额外参数,则该参数用于初始化引脚。任何未指定设置都将保留其先前状态。 参数如下: - ``id`` 是强制性的,可为一个任意对象。可能的值类型为:int(内部引脚标识符)、str(引脚名称)、元组(一对[端口, 引脚])。 - ``mode`` 指定引脚模式,可为下列之一: - ``Pin.IN`` - 引脚配置为输入。若将之视为输出,则引脚会处于高阻抗状态。 - ``Pin.OUT`` - 引脚配置为(常规)输出。 - ``Pin.OPEN_DRAIN`` - 引脚配置为开漏输出。开漏输出按照以下方式工作:若输出值设置为0,则引脚处于低电平状态;若输出值设置为1,则引脚处于高阻抗状态。并非所有端口都实现这一模式,某些端口仅在特定引脚实现。 - ``Pin.ALT`` - 引脚设置为执行另一特定于端口的函数。由于引脚以此种方式配置,其他引脚方法(除Pin.init()外)都不适用(调用这些方法将导致未定义的、特定于硬件的结果)。并非所有端口都实现这一模式。 - ``Pin.ALT_OPEN_DRAIN`` - 与 ``Pin.ALT`` 相同,但是该引脚配置为开漏。并非所有引脚都实现该模式。 - ``pull`` 指定,若引脚与一个(弱)电阻相连,可为下列之一: - ``None`` - 无上拉或下拉电阻。 - ``Pin.PULL_UP`` - 启用上拉电阻。 - ``Pin.PULL_DOWN`` - 启用下拉电阻。 - ``value`` 只对Pin.OUT和Pin.OPEN_DRAIN模式有效,且在给定情况下指定初始输出引脚值,否则该外围引脚状态仍未改变。 - ``drive`` 指定引脚的输出功率,可为下列之一: ``Pin.LOW_POWER``, ``Pin.MED_POWER`` 和 ``Pin.HIGH_POWER``. 当前的实际驱动能力是取决于端口。并非所有端口都实现该参数。 - ``alt`` 为引脚指定一个替代函数,其可取的值取决于端口。该参数仅对 ``Pin.ALT`` 和 ``Pin.ALT_OPEN_DRAIN`` 模式有效。该参数可能用于引脚支持多个备用函数时。若引脚仅支持一个备用函数,则不需要该参数。并非所有端口都实现该参数。 如上所述,引脚类允许为特定引脚设置一个备用函数,但并未在引脚上指定任何进一步的操作。在备用函数模式下配置的引脚通常不用作GPIO, 而是由其他外围硬件驱动。这一注脚唯一支持的操作是通过调用构造函数或 `Pin.init()` 方法重新初始化。 若在备用函数模式下配置的引脚使用 ``Pin.IN`` 、 ``Pin.OUT`` 、 ``Pin.OPEN_DRAIN`` 重新初始化,该备用函数将会从引脚中删除。 方法 ------- .. method:: Pin.init(mode=-1, pull=-1, \*, value, drive, alt) 使用给定参数将引脚重新初始化。只有指定参数将被设置。其余的外围引脚状态将保持不变。更多参数细节,请参见构造函数文件。 返回 ``None``. .. method:: 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``. .. method:: Pin.__call__([x]) 引脚对象可调用。调用方法提供设置和获取引脚值的快捷方式。等同于Pin.value([x])。详情请参见 See :meth:`Pin.value` . .. method:: Pin.mode([mode]) 获取或设置引脚模式。 ``mode`` 参数的更多细节,请参见构造函数。 .. method:: Pin.pull([pull]) 获取或这是引脚的上拉状态。 ``pull`` 参数的更多细节,请参见构造函数文件。 .. method:: Pin.drive([drive]) 获取或设置引脚的驱动强度。 ``drive`` 参数的更多细节,请参见构造函数文件。 并非所有版本都实现该方法。 可用性:WiPy。 .. method:: Pin.irq(handler=None, trigger=(Pin.IRQ_FALLING | Pin.IRQ_RISING), \*, priority=1, wake=None) 配置一个中断处理程序,当引脚的触发器源处于激活状态时,调用该程序。若引脚模式为 ``Pin.IN`` , 则触发器源为引脚上的外部值。若引脚模式为 ``Pin.OUT`` ,则触发器源为引脚上的输出缓冲区。 否则,若引脚模式为 ``Pin.OPEN_DRAIN`` ,状态为“0”时,触发器源为输出缓冲区;状态为“1”时,触发器源为外部引脚值。 参数为: - ``handler`` 是中断触发时所调用的可选函数。 - ``trigger`` 配置可产生中断的事件。可能值为: - ``Pin.IRQ_FALLING`` 下降沿上的中断. - ``Pin.IRQ_RISING`` 上升沿上的中断. - ``Pin.IRQ_LOW_LEVEL`` 低电平上的中断. - ``Pin.IRQ_HIGH_LEVEL`` 高电平上的中断. 这些值可在多个事件中同时进行“或”运算。 - ``priority`` 设置中断的优先级。可取的值时特定于端口的,但是高数值通常代表高优先级。 - ``wake`` 选择电源模式,在该模式下中断可唤醒系统。可为 ``machine.IDLE``, ``machine.SLEEP`` 或 ``machine.DEEPSLEEP``. 这些值可同时进行“或”运算,以使引脚在多种电源模式下生成中断。 该方法返回一个回调对象。 常量 --------- 以下常量用于配置引脚对象。注意:并非所有常量都在所有移植版本上可用。 .. data:: Pin.IN Pin.OUT Pin.OPEN_DRAIN Pin.ALT Pin.ALT_OPEN_DRAIN 选择引脚模式。 .. data:: Pin.PULL_UP Pin.PULL_DOWN 选择是否有上拉/下拉电阻。若无上拉/下拉电阻,则使用 ``None`` 值。 .. data:: Pin.LOW_POWER Pin.MED_POWER Pin.HIGH_POWER 选择引脚的驱动强度。 .. data:: Pin.IRQ_FALLING Pin.IRQ_RISING Pin.IRQ_LOW_LEVEL Pin.IRQ_HIGH_LEVEL 选择IRQ的触发类型。