klasa Pin – sterowanie pinami we/wy

Obiekt Pin reprezentuje pojedynczy pin GPIO na układzie STM32. Udostępnia metody konfiguracji trybu pinu (wejście, wyjście, funkcja alternatywna, analogowy) oraz rezystorów podciągających, a także odczytu lub ustawiania jego poziomu cyfrowego. Próbkowanie analogowe opisano w pyb.ADC; wyliczanie funkcji alternatywnych opisano w PinAF.

Wszystkie piny złącza są predefiniowane jako pyb.Pin.board.<name>. Większość kamer STM32 OpenMV Cam udostępnia piny we/wy złącza P0P9; OpenMV Cam N6 udostępnia dodatkowe piny aż do P18

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

Bazowy port/pin STM32 można również zaadresować bezpośrednio przez pyb.Pin.cpu.<name>, nazwany literą portu, po której następuje numer pinu (na przykład pyb.Pin.cpu.A0). Mapowanie każdego pinu złącza OpenMV na pin CPU jest ustalone przez płytkę.

Piny można również wybierać po nazwie tekstowej:

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

Nazwy zdefiniowane przez użytkownika można dodać za pomocą Pin.dict()

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

i odpytać zwrotnie:

pin = pyb.Pin("LeftMotorDir")

Alternatywnie można zainstalować niestandardową funkcję mapującą za pomocą Pin.mapper()

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

pyb.Pin.mapper(MyMapper)

tak więc wywołanie pyb.Pin("LeftMotorDir", pyb.Pin.OUT_PP) przekazuje "LeftMotorDir" bezpośrednio do funkcji mapującej.

Poniższa kolejność określa, w jaki sposób nazwa jest mapowana na fizyczny pin:

  1. Obiekt Pin jest przekazywany bezpośrednio.

  2. Dostarczona przez użytkownika funkcja mapująca zwraca pin.

  3. Dostarczony przez użytkownika słownik zawiera pasujący klucz.

  4. Łańcuch znaków pasuje do nazwy pinu płytki (P0, P1, …).

  5. Łańcuch znaków pasuje do nazwy portu/pinu CPU (A0, B7, …).

Wywołaj pyb.Pin.debug(True), aby wypisać informacje diagnostyczne o tym, jak każdy obiekt jest mapowany na pin.

Konstruktory

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

Tworzy nowy obiekt Pin powiązany z podanym id. Jeśli podano dodatkowe argumenty, są one przekazywane do Pin.init() w celu skonfigurowania pinu.

Metody klasowe

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

Pobiera lub ustawia stan debugowania (True lub False dla włączenia lub wyłączenia).

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

Pobiera lub ustawia słownik funkcji mapującej piny.

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

Pobiera lub ustawia funkcję mapującą piny.

Metody

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

Inicjalizuje pin:

  • mode może być jednym z:

    • Pin.IN - konfiguruje pin jako wejście;

    • Pin.OUT_PP - konfiguruje pin jako wyjście, ze sterowaniem typu push-pull;

    • Pin.OUT_OD - konfiguruje pin jako wyjście, ze sterowaniem typu open-drain;

    • Pin.ALT - konfiguruje pin dla funkcji alternatywnej, wejściowej lub wyjściowej;

    • Pin.AF_PP - konfiguruje pin dla funkcji alternatywnej, push-pull;

    • Pin.AF_OD - konfiguruje pin dla funkcji alternatywnej, open-drain;

    • Pin.ANALOG - konfiguruje pin jako analogowy.

  • pull może być jednym z:

    • Pin.PULL_NONE - brak rezystorów podciągających w górę lub w dół;

    • Pin.PULL_UP - włącza rezystor podciągający w górę;

    • Pin.PULL_DOWN - włącza rezystor podciągający w dół.

    Gdy pin ma włączony tryb podciągania Pin.PULL_UP lub Pin.PULL_DOWN, pin ten jest podciągany odpowiednio do 3V3 lub GND przez wewnętrzny rezystor (zwykle dziesiątki kOhm – patrz charakterystyki elektryczne w karcie katalogowej STM32 dla używanej kamery OpenMV Cam).

  • value jeśli nie jest None, ustawi wartość wyjściową portu przed włączeniem pinu.

  • alt można użyć, gdy tryb to Pin.ALT, Pin.AF_PP lub Pin.AF_OD, aby ustawić indeks lub nazwę jednej z funkcji alternatywnych powiązanych z pinem. Argument ten nazywał się wcześniej af i nadal może być używany w razie potrzeby.

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

Pobiera lub ustawia poziom logiczny cyfrowy pinu:

  • Bez argumentu zwraca 0 lub 1 w zależności od poziomu logicznego pinu.

  • Gdy podano value, ustawia poziom logiczny pinu. value może być czymkolwiek, co konwertuje się na wartość logiczną. Jeśli konwertuje się na True, pin jest ustawiany na stan wysoki, w przeciwnym razie na niski.

__str__() str

Zwraca łańcuch znaków opisujący obiekt pinu.

af() int

Zwraca aktualnie skonfigurowaną funkcję alternatywną pinu. Zwrócona liczba całkowita będzie odpowiadać jednej z dozwolonych stałych dla argumentu af funkcji init.

af_list() List[PinAF]

Zwraca tablicę funkcji alternatywnych dostępnych dla tego pinu.

gpio() int

Zwraca adres bazowy bloku GPIO powiązanego z tym pinem.

mode() int

Zwraca aktualnie skonfigurowany tryb pinu. Zwrócona liczba całkowita będzie odpowiadać jednej z dozwolonych stałych dla argumentu mode funkcji init.

name() str

Pobiera nazwę pinu.

names() List[str]

Zwraca nazwy cpu i płytki dla tego pinu.

pin() int

Pobiera numer pinu.

port() int

Pobiera port pinu.

pull() int

Zwraca aktualnie skonfigurowane podciąganie pinu. Zwrócona liczba całkowita będzie odpowiadać jednej z dozwolonych stałych dla argumentu pull funkcji init.

Stałe

IN: int

Konfiguruje pin jako wejście cyfrowe (o wysokiej impedancji).

OUT_PP: int

Konfiguruje pin jako wyjście cyfrowe ze sterownikiem push-pull.

OUT_OD: int

Konfiguruje pin jako wyjście cyfrowe ze sterownikiem open-drain.

ANALOG: int

Konfiguruje pin jako wejście analogowe (np. do użytku z ADC).

ALT: int

Konfiguruje pin jako funkcję alternatywną (wejściową lub wyjściową).

AF_PP: int

Konfiguruje pin jako funkcję alternatywną ze sterownikiem push-pull.

AF_OD: int

Konfiguruje pin jako funkcję alternatywną ze sterownikiem open-drain.

PULL_NONE: int

Wyłącza zarówno rezystory podciągające w górę, jak i w dół na pinie.

PULL_UP: int

Włącza wewnętrzny rezystor podciągający w górę na pinie.

PULL_DOWN: int

Włącza wewnętrzny rezystor podciągający w dół na pinie.