clasa ExtInt – configurarea pinilor I/O pentru a întrerupe la evenimente externe¶
Microcontrolerele STM32 împart controlerul de întreruperi externe (EXTI) în două intervale: liniile 0-15 sunt acționate de pinii GPIO, iar liniile de peste 15 sunt legate de surse interne (alarmă RTC, trezire RTC, trezire USB etc.). Numărul total de linii și maparea liniilor interne de peste 15 sunt specifice fiecărui microcontroler; consultați secțiunea EXTI din manualul de referință al microcontrolerului OpenMV Cam pentru atribuirile exacte.
Fiecare linie GPIO N poate fi acționată de pinul PxN de pe oricare port GPIO la un moment dat – de exemplu, linia 0 poate fi mapată la PA0, PB0, PC0 sau orice alt pin 0 din porturile A până la K, dar doar unul singur la un moment dat.
Exemplu:
def callback(line):
print("line =", line)
extint = pyb.ExtInt(pin, pyb.ExtInt.IRQ_FALLING, pyb.Pin.PULL_UP, callback)
Fiecare front descendent pe pin invocă apoi callback. ExtInt configurează automat linia GPIO ca intrare; nu este nevoie să faceți acest lucru singur.
Notă
Butoanele mecanice cu apăsare „vibrează” (bounce) și o singură apăsare sau eliberare generează adesea mai multe fronturi. Vezi de exemplu acest îndrumar despre debouncing pentru tehnici.
Înregistrarea a două funcții de retroapelare (callback) pe același pin generează o excepție.
Dacă pin este transmis ca un întreg, se presupune că identifică una dintre liniile de întrerupere interne și trebuie să fie >= 16 și sub numărul total de linii EXTI ale microcontrolerului. Orice altă valoare a pinului este rezolvată prin maparea standard a pinilor.
Pe lângă modurile IRQ_* există modurile de eveniment EVT_RISING, EVT_FALLING și EVT_RISING_FALLING, care direcționează o tranziție către intrarea de eveniment a procesorului (folosită cu instrucțiunea WFE pentru așteptare cu consum redus). Modurile EVT_* nu invocă funcția de retroapelare Python și sunt destinate utilizării în scopuri de gestionare a alimentării / repaus; codul obișnuit al aplicației ar trebui să folosească modurile IRQ_*.
Constructori¶
- class pyb.ExtInt(pin: int | str | Pin, mode: int, pull: int, callback: Callable[[int], None])¶
Creează un obiect
ExtInt.pin– pinul pe care se activează întreruperea. Poate fi un obiectPin, un șir cu numele pinului sau un întreg în intervalul16-21pentru a selecta o sursă de întrerupere internă.mode– modul de declanșare. Unul dintre:Constantă
Declanșare
Front ascendent.
Front descendent.
Fie front ascendent, fie descendent.
pull– configurația rezistenței de polarizare a pinului. Una dintrepyb.Pin.PULL_NONE,pyb.Pin.PULL_UPsaupyb.Pin.PULL_DOWN.callback– funcția apelabilă invocată la declanșare. Trebuie să accepte exact un argument: numărul liniei EXTI care s-a declanșat.
Metode de clasă¶
Metode¶
Constante¶
- IRQ_RISING: int¶
Declanșează o întrerupere pe un front ascendent. Funcția de retroapelare Python se execută.
- IRQ_FALLING: int¶
Declanșează o întrerupere pe un front descendent. Funcția de retroapelare Python se execută.
- IRQ_RISING_FALLING: int¶
Declanșează o întrerupere pe oricare front. Funcția de retroapelare Python se execută.
- EVT_RISING: int¶
Direcționează un front ascendent către intrarea de eveniment Cortex. Nu se invocă nicio funcție de retroapelare Python; destinat utilizării cu instrucțiunea
WFEîn cod cu consum redus.