class Pin -- 控制 I/O 接腳¶
接腳物件用於控制 I/O 接腳(也稱為 GPIO,即通用輸入/輸出)。接腳物件通常與一個實體接腳相關聯,該接腳可以驅動輸出電壓並讀取輸入電壓。Pin 類別提供了設定接腳模式(IN、OUT 等)的方法,以及取得和設定數位邏輯位準的方法。若要對接腳進行類比控制,請參閱 ADC 類別。
接腳物件是透過一個明確指定某個 I/O 接腳的識別碼來建構的。識別碼允許的格式以及識別碼所對應的實體接腳是依連接埠而定的。識別碼可以是整數、字串,或是包含連接埠與接腳編號的 tuple。
使用模型:
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_0、Pin.DRIVE_1等,驅動強度依序遞增。實際的電流驅動能力依連接埠而定。並非所有連接埠都實作此引數。alt為接腳指定一個替代功能,其可取的值依連接埠而定。此引數僅對Pin.ALT和Pin.ALT_OPEN_DRAIN模式有效。當某個接腳支援多個替代功能時可使用此引數。若僅支援一個接腳替代功能,則不需要此引數。並非所有連接埠都實作此引數。
如上所述,Pin 類別允許為特定接腳設定替代功能,但並未指定對此類接腳的任何後續操作。設定為替代功能模式的接腳通常不會用作 GPIO,而是由其他硬體周邊裝置驅動。對此類接腳唯一支援的操作是重新初始化,方法是呼叫建構函式或
Pin.init()方法。若一個設定為替代功能模式的接腳以Pin.IN、Pin.OUT或Pin.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.OUT或Pin.OPEN_DRAIN模式,儲存的值便會在接腳上生效。Pin.OUT- 輸出緩衝區立即設為給定的值。Pin.OPEN_DRAIN- 若值為「0」,接腳設為低電壓狀態。否則接腳設為高阻抗狀態。
設定值時,此方法回傳
None。
- __call__(x: Any = None, /) int | None¶
接腳物件是可呼叫的。呼叫方法提供了一個(快速的)捷徑來設定及取得接腳的值。它等同於 Pin.value([x])。詳細資訊請參閱
Pin.value()。
- 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 連接埠皆可用的方法¶
僅限 mimxrt + alif¶
僅限 STM32¶
常數¶
下列常數用於透過建構函式、
init()和irq()來設定Pin物件。它們依連接埠的可用性分組。所有 OpenMV 連接埠皆可用的常數¶
僅限 STM32¶
- AF_OD: int¶
替代功能開汲極模式(與
ALT_OPEN_DRAIN值相同)。
- OUT_OD: int¶
開汲極輸出模式(與
OPEN_DRAIN值相同)。
僅限 mimxrt¶