clasa Pin – controlul pinilor I/O

Un obiect Pin reprezintă un singur GPIO de pe STM32. Acesta oferă metode pentru a configura modul pinului (intrare, ieșire, funcție alternativă, analogic) și rezistențele de pull, precum și pentru a citi sau a impune nivelul său logic digital. Pentru eșantionare analogică consultați pyb.ADC; pentru enumerarea funcțiilor alternative consultați PinAF.

Toți pinii de pe header sunt predefiniți ca pyb.Pin.board.<name>. Majoritatea camerelor OpenMV Cam bazate pe STM32 expun pinii de pe header-ul I/O P0P9; OpenMV Cam N6 expune pini suplimentari, până la P18

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

Portul/pinul STM32 subiacent poate fi de asemenea adresat direct prin pyb.Pin.cpu.<name>, denumit cu litera portului urmată de numărul pinului (de exemplu pyb.Pin.cpu.A0). Maparea fiecărui pin de pe header-ul OpenMV la un pin CPU este fixată de placă.

Pinii pot fi de asemenea selectați după nume sub formă de șir:

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

Numele definite de utilizator pot fi adăugate cu Pin.dict()

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

și interogate înapoi:

pin = pyb.Pin("LeftMotorDir")

În mod alternativ, o funcție de mapare personalizată poate fi instalată cu Pin.mapper()

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

pyb.Pin.mapper(MyMapper)

astfel încât un apel la pyb.Pin("LeftMotorDir", pyb.Pin.OUT_PP) transmite "LeftMotorDir" direct către funcția de mapare.

Ordinea următoare determină modul în care un nume este mapat la un pin fizic:

  1. Un obiect Pin este transmis direct.

  2. Funcția de mapare furnizată de utilizator returnează un pin.

  3. Dicționarul furnizat de utilizator conține o cheie corespunzătoare.

  4. Șirul corespunde unui nume de pin al plăcii (P0, P1, …).

  5. Șirul corespunde unui nume de port/pin CPU (A0, B7, …).

Apelați pyb.Pin.debug(True) pentru a afișa informații de diagnosticare despre modul în care fiecare obiect este mapat la un pin.

Constructori

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

Creează un nou obiect Pin asociat cu id-ul dat. Dacă sunt furnizate argumente suplimentare, acestea sunt transmise mai departe către Pin.init() pentru a configura pinul.

Metode de clasă

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

Obține sau setează starea de depanare (True sau False pentru pornit sau oprit).

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

Obține sau setează dicționarul funcției de mapare a pinilor.

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

Obține sau setează funcția de mapare a pinilor.

Metode

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

Inițializează pinul:

  • mode poate fi una dintre:

    • Pin.IN - configurează pinul pentru intrare;

    • Pin.OUT_PP - configurează pinul pentru ieșire, cu control push-pull;

    • Pin.OUT_OD - configurează pinul pentru ieșire, cu control open-drain;

    • Pin.ALT - configurează pinul pentru funcție alternativă, intrare sau ieșire;

    • Pin.AF_PP - configurează pinul pentru funcție alternativă, push-pull;

    • Pin.AF_OD - configurează pinul pentru funcție alternativă, open-drain;

    • Pin.ANALOG - configurează pinul pentru mod analogic.

  • pull poate fi una dintre:

    • Pin.PULL_NONE - fără rezistențe de pull-up sau pull-down;

    • Pin.PULL_UP - activează rezistența de pull-up;

    • Pin.PULL_DOWN - activează rezistența de pull-down.

    Când un pin are activat modul de pull Pin.PULL_UP sau Pin.PULL_DOWN, acel pin este tras la 3V3, respectiv la GND, printr-o rezistență internă (de obicei zeci de kOhm – consultați caracteristicile electrice din fișa tehnică STM32 pentru camera OpenMV Cam utilizată).

  • value, dacă nu este None, va seta valoarea de ieșire a portului înainte de a activa pinul.

  • alt poate fi folosit când modul este Pin.ALT, Pin.AF_PP sau Pin.AF_OD pentru a seta indexul sau numele uneia dintre funcțiile alternative asociate unui pin. Acest argument se numea anterior af, care poate fi încă folosit dacă este necesar.

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

Obține sau setează nivelul logic digital al pinului:

  • Fără niciun argument, returnează 0 sau 1 în funcție de nivelul logic al pinului.

  • Cu value dat, setează nivelul logic al pinului. value poate fi orice se convertește la o valoare booleană. Dacă se convertește la True, pinul este setat pe nivel înalt, altfel este setat pe nivel jos.

__str__() str

Returnează un șir care descrie obiectul pin.

af() int

Returnează funcția alternativă configurată în prezent a pinului. Numărul întreg returnat va corespunde uneia dintre constantele permise pentru argumentul af al funcției init.

af_list() List[PinAF]

Returnează un tablou al funcțiilor alternative disponibile pentru acest pin.

gpio() int

Returnează adresa de bază a blocului GPIO asociat cu acest pin.

mode() int

Returnează modul configurat în prezent al pinului. Numărul întreg returnat va corespunde uneia dintre constantele permise pentru argumentul mode al funcției init.

name() str

Obține numele pinului.

names() List[str]

Returnează numele cpu și board pentru acest pin.

pin() int

Obține numărul pinului.

port() int

Obține portul pinului.

pull() int

Returnează configurația de pull curentă a pinului. Numărul întreg returnat va corespunde uneia dintre constantele permise pentru argumentul pull al funcției init.

Constante

IN: int

Configurează pinul ca intrare digitală (impedanță înaltă).

OUT_PP: int

Configurează pinul ca ieșire digitală cu un driver push-pull.

OUT_OD: int

Configurează pinul ca ieșire digitală cu un driver open-drain.

ANALOG: int

Configurează pinul ca intrare analogică (de exemplu pentru utilizare cu ADC).

ALT: int

Configurează pinul ca funcție alternativă (intrare sau ieșire).

AF_PP: int

Configurează pinul ca funcție alternativă cu un driver push-pull.

AF_OD: int

Configurează pinul ca funcție alternativă cu un driver open-drain.

PULL_NONE: int

Dezactivează atât rezistențele de pull-up, cât și cele de pull-down de pe pin.

PULL_UP: int

Activează rezistența internă de pull-up de pe pin.

PULL_DOWN: int

Activează rezistența internă de pull-down de pe pin.