classe ExtInt – configura i pin di I/O per generare interrupt su eventi esterni¶
Le MCU STM32 suddividono il controller di interrupt esterni (EXTI) in due intervalli: le linee 0-15 sono pilotate dai pin GPIO, mentre le linee superiori a 15 sono collegate a sorgenti interne (allarme RTC, wakeup RTC, wakeup USB, ecc.). Il numero totale di linee e la mappatura delle linee interne superiori a 15 dipendono dalla MCU; consultare la sezione EXTI del manuale di riferimento della MCU dell’OpenMV Cam per le assegnazioni esatte.
Ogni linea GPIO N può essere pilotata dal pin PxN di una sola porta GPIO alla volta – per esempio la linea 0 può mappare su PA0, PB0, PC0 o qualsiasi altro pin 0 dalla porta A alla porta K, ma solo uno alla volta.
Esempio:
def callback(line):
print("line =", line)
extint = pyb.ExtInt(pin, pyb.ExtInt.IRQ_FALLING, pyb.Pin.PULL_UP, callback)
Ogni fronte di discesa su pin invoca quindi callback. ExtInt configura automaticamente la linea GPIO come ingresso; non è necessario farlo manualmente.
Nota
I pulsanti meccanici «rimbalzano» e una singola pressione o rilascio genera spesso più fronti. Vedere per esempio questa guida introduttiva al debouncing per le tecniche.
La registrazione di due callback sullo stesso pin solleva un’eccezione.
Se pin viene passato come intero, si assume che identifichi una delle linee di interrupt interne e deve essere >= 16 e inferiore al numero totale di linee EXTI della MCU. Qualsiasi altro valore di pin viene risolto tramite il mappatore di pin standard.
Oltre alle modalità IRQ_* esistono le modalità evento EVT_RISING, EVT_FALLING ed EVT_RISING_FALLING che instradano una transizione all’ingresso evento del processore (usato con l’istruzione WFE per l’attesa a basso consumo). Le modalità EVT_* non invocano il callback Python e sono pensate per usi di sleep / gestione dell’energia; il normale codice applicativo dovrebbe usare le modalità IRQ_*.
Costruttori¶
- class pyb.ExtInt(pin: int | str | Pin, mode: int, pull: int, callback: Callable[[int], None])¶
Crea un oggetto
ExtInt.pin– il pin su cui abilitare l’interrupt. Può essere un oggettoPin, una stringa con il nome del pin, oppure un intero nell’intervallo16-21per selezionare una sorgente di interrupt interna.mode– la modalità di trigger. Una tra:Costante
Trigger
Fronte di salita.
Fronte di discesa.
Fronte di salita o di discesa.
pull– la configurazione di pull del pin. Una trapyb.Pin.PULL_NONE,pyb.Pin.PULL_UPopyb.Pin.PULL_DOWN.callback– oggetto chiamabile invocato al trigger. Deve accettare esattamente un argomento: il numero della linea EXTI che si è attivata.
Metodi di classe¶
Metodi¶
Costanti¶
- IRQ_RISING_FALLING: int¶
Attiva un interrupt su entrambi i fronti. Il callback Python viene eseguito.
- EVT_RISING: int¶
Instrada un fronte di salita all’ingresso evento del Cortex. Non viene invocato alcun callback Python; pensato per l’uso con l’istruzione
WFEnel codice a basso consumo.