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 oggetto Pin, una stringa con il nome del pin, oppure un intero nell’intervallo 16-21 per selezionare una sorgente di interrupt interna.

  • mode – la modalità di trigger. Una tra:

    Costante

    Trigger

    ExtInt.IRQ_RISING

    Fronte di salita.

    ExtInt.IRQ_FALLING

    Fronte di discesa.

    ExtInt.IRQ_RISING_FALLING

    Fronte di salita o di discesa.

  • pull – la configurazione di pull del pin. Una tra pyb.Pin.PULL_NONE, pyb.Pin.PULL_UP o pyb.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

classmethod regs() None

Stampa il contenuto dei registri della periferica EXTI (per il debug).

Metodi

disable() None

Disabilita l’interrupt associato a questo oggetto ExtInt. Utile per il debouncing software.

enable() None

Riabilita un interrupt precedentemente disabilitato con disable().

line() int

Restituisce il numero della linea EXTI a cui questo oggetto è mappato.

swint() None

Attiva il callback via software (come se sulla linea fosse avvenuto il fronte configurato).

Costanti

IRQ_RISING: int

Attiva un interrupt su un fronte di salita. Il callback Python viene eseguito.

IRQ_FALLING: int

Attiva un interrupt su un fronte di discesa. Il callback Python viene eseguito.

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 WFE nel codice a basso consumo.

EVT_FALLING: int

Instrada un fronte di discesa all’ingresso evento del Cortex. Non viene invocato alcun callback Python.

EVT_RISING_FALLING: int

Instrada entrambi i fronti all’ingresso evento del Cortex. Non viene invocato alcun callback Python.