třída Pin – ovládání I/O pinů

Objekt Pin představuje jeden GPIO na STM32. Poskytuje metody pro konfiguraci režimu pinu (vstup, výstup, alternativní funkce, analogový) a pull rezistorů a pro čtení nebo nastavení jeho digitální úrovně. Pro analogové vzorkování viz pyb.ADC; pro výčet alternativních funkcí viz PinAF.

Všechny piny konektoru jsou předdefinovány jako pyb.Pin.board.<name>. Většina STM32 OpenMV Cam zpřístupňuje I/O piny konektoru P0P9; OpenMV Cam N6 zpřístupňuje další piny až po P18

p0 = pyb.Pin.board.P0
g = pyb.Pin(pyb.Pin.board.P0, pyb.Pin.IN)

Podkladový STM32 port/pin lze také adresovat přímo přes pyb.Pin.cpu.<name>, pojmenovaný jako písmeno portu následované číslem pinu (například pyb.Pin.cpu.A0). Mapování každého pinu konektoru OpenMV na CPU pin je pevně dáno deskou.

Piny lze také vybírat řetězcovým názvem:

g = pyb.Pin("P0", pyb.Pin.OUT_PP)

Uživatelsky definované názvy lze přidat pomocí Pin.dict()

MyMapperDict = {"LeftMotorDir": pyb.Pin.cpu.A0}
pyb.Pin.dict(MyMapperDict)
g = pyb.Pin("LeftMotorDir", pyb.Pin.OUT_OD)

a zpětně dotazovat:

pin = pyb.Pin("LeftMotorDir")

Alternativně lze nainstalovat vlastní mapovací funkci pomocí Pin.mapper()

def MyMapper(pin_name):
    if pin_name == "LeftMotorDir":
        return pyb.Pin.cpu.A0

pyb.Pin.mapper(MyMapper)

takže volání pyb.Pin("LeftMotorDir", pyb.Pin.OUT_PP) předá "LeftMotorDir" přímo mapperu.

Následující pořadí určuje, jak se název namapuje na fyzický pin:

  1. Objekt Pin je předán přímo.

  2. Uživatelem dodaná mapovací funkce vrátí pin.

  3. Uživatelem dodaný slovník obsahuje odpovídající klíč.

  4. Řetězec odpovídá názvu pinu desky (P0, P1, …).

  5. Řetězec odpovídá názvu CPU portu/pinu (A0, B7, …).

Zavolejte pyb.Pin.debug(True) pro výpis diagnostických informací o tom, jak je každý objekt namapován na pin.

Konstruktory

class pyb.Pin(id: str | Pin, *args, **kwargs)

Vytvoří nový objekt Pin přidružený k danému id. Pokud jsou zadány další argumenty, jsou předány do Pin.init() pro konfiguraci pinu.

Metody třídy

classmethod debug(state: bool | None = None) bool | None

Získá nebo nastaví stav ladění (True nebo False pro zapnuto nebo vypnuto).

classmethod dict(dict: dict | None = None) dict | None

Získá nebo nastaví slovník mapperu pinů.

classmethod mapper(fun: Callable[[str], Pin] | None = None) Callable[[str], Pin] | None

Získá nebo nastaví mapovací funkci pinů.

Metody

init(mode: int, pull: int = Pin.PULL_NONE, *, value: int | None = None, alt: int | str = -1) None

Inicializuje pin:

  • mode může být jedno z:

    • Pin.IN - konfiguruje pin jako vstup;

    • Pin.OUT_PP - konfiguruje pin jako výstup s push-pull řízením;

    • Pin.OUT_OD - konfiguruje pin jako výstup s open-drain řízením;

    • Pin.ALT - konfiguruje pin pro alternativní funkci, vstup nebo výstup;

    • Pin.AF_PP - konfiguruje pin pro alternativní funkci, push-pull;

    • Pin.AF_OD - konfiguruje pin pro alternativní funkci, open-drain;

    • Pin.ANALOG - konfiguruje pin jako analogový.

  • pull může být jedno z:

    • Pin.PULL_NONE - žádné pull-up ani pull-down rezistory;

    • Pin.PULL_UP - zapne pull-up rezistor;

    • Pin.PULL_DOWN - zapne pull-down rezistor.

    Když má pin zapnutý pull-mode Pin.PULL_UP nebo Pin.PULL_DOWN, je tento pin přitažen k 3V3 respektive GND přes interní rezistor (typicky desítky kOhm – viz elektrické charakteristiky v datasheetu STM32 pro používanou OpenMV Cam).

  • value pokud není None, nastaví výstupní hodnotu portu před zapnutím pinu.

  • alt lze použít, když je režim Pin.ALT, Pin.AF_PP nebo Pin.AF_OD, pro nastavení indexu nebo názvu jedné z alternativních funkcí přidružených k pinu. Tento argument se dříve nazýval af, který lze v případě potřeby stále používat.

value(value: Any | None = None) int | None

Získá nebo nastaví digitální logickou úroveň pinu:

  • Bez argumentu vrátí 0 nebo 1 podle logické úrovně pinu.

  • Pokud je zadána value, nastaví logickou úroveň pinu. value může být cokoli, co se převede na boolean. Pokud se převede na True, pin se nastaví na vysokou úroveň, jinak na nízkou.

__str__() str

Vrátí řetězec popisující objekt pinu.

af() int

Vrátí aktuálně nakonfigurovanou alternativní funkci pinu. Vrácené celé číslo bude odpovídat jedné z povolených konstant pro argument af funkce init.

af_list() List[PinAF]

Vrátí pole alternativních funkcí dostupných pro tento pin.

gpio() int

Vrátí bázovou adresu GPIO bloku přidruženého k tomuto pinu.

mode() int

Vrátí aktuálně nakonfigurovaný režim pinu. Vrácené celé číslo bude odpovídat jedné z povolených konstant pro argument mode funkce init.

name() str

Získá název pinu.

names() List[str]

Vrátí názvy cpu a desky pro tento pin.

pin() int

Získá číslo pinu.

port() int

Získá port pinu.

pull() int

Vrátí aktuálně nakonfigurovaný pull pinu. Vrácené celé číslo bude odpovídat jedné z povolených konstant pro argument pull funkce init.

Konstanty

IN: int

Konfiguruje pin jako digitální vstup (vysoká impedance).

OUT_PP: int

Konfiguruje pin jako digitální výstup s push-pull budičem.

OUT_OD: int

Konfiguruje pin jako digitální výstup s open-drain budičem.

ANALOG: int

Konfiguruje pin jako analogový vstup (např. pro použití s ADC).

ALT: int

Konfiguruje pin jako alternativní funkci (vstup nebo výstup).

AF_PP: int

Konfiguruje pin jako alternativní funkci s push-pull budičem.

AF_OD: int

Konfiguruje pin jako alternativní funkci s open-drain budičem.

PULL_NONE: int

Vypne na pinu pull-up i pull-down rezistory.

PULL_UP: int

Zapne na pinu interní pull-up rezistor.

PULL_DOWN: int

Zapne na pinu interní pull-down rezistor.