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 上下拉模式時,該接腳會分別透過內部電阻被拉至 3V3 或 GND(通常為數十 kOhm —— 請參閱所使用 OpenMV Cam 的 STM32 資料手冊中的電氣特性)。

  • value 若不為 None,會在啟用接腳前設定連接埠輸出值。

  • alt 可在模式為 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 與開發板名稱。

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

啟用接腳上的內部下拉電阻。