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.