clase ExtInt – configura los pines de E/S para interrumpir ante eventos externos

Los microcontroladores STM32 dividen el controlador de interrupciones externas (EXTI) en dos rangos: las líneas 0-15 se accionan desde los pines GPIO, y las líneas por encima de 15 están vinculadas a fuentes internas (alarma RTC, despertar RTC, despertar USB, etc.). El número total de líneas y la asignación de las líneas internas por encima de 15 son específicos del microcontrolador; consulta la sección EXTI del manual de referencia del microcontrolador de la OpenMV Cam para conocer las asignaciones exactas.

Cada línea GPIO N puede ser accionada por el pin PxN de un único puerto GPIO a la vez; por ejemplo, la línea 0 puede asignarse a PA0, PB0, PC0 o cualquier otro pin 0 de los puertos A a K, pero solo a uno a la vez.

Ejemplo:

def callback(line):
    print("line =", line)

extint = pyb.ExtInt(pin, pyb.ExtInt.IRQ_FALLING, pyb.Pin.PULL_UP, callback)

Cada flanco de bajada en pin invoca entonces a callback. ExtInt configura automáticamente la línea GPIO como entrada; no necesitas hacerlo tú mismo.

Nota

Los pulsadores mecánicos «rebotan» y una sola pulsación o liberación a menudo genera múltiples flancos. Consulta, por ejemplo, esta guía sobre el antirrebote para conocer algunas técnicas.

Registrar dos funciones de retorno (callback) en el mismo pin lanza una excepción.

Si pin se pasa como entero, se asume que identifica una de las líneas de interrupción internas y debe ser >= 16 e inferior al número total de líneas EXTI del microcontrolador. Cualquier otro valor de pin se resuelve a través del mapeador de pines estándar.

Además de los modos IRQ_*, existen los modos de evento EVT_RISING, EVT_FALLING y EVT_RISING_FALLING que enrutan una transición a la entrada de eventos del procesador (usada con la instrucción WFE para la espera de bajo consumo). Los modos EVT_* no invocan la función de retorno (callback) de Python y están pensados para usos de suspensión / gestión de energía; el código de aplicación normal debe usar los modos IRQ_*.

Constructores

class pyb.ExtInt(pin: int | str | Pin, mode: int, pull: int, callback: Callable[[int], None])

Crea un objeto ExtInt.

  • pin – el pin en el que habilitar la interrupción. Puede ser un objeto Pin, una cadena con el nombre del pin, o un entero en el rango 16-21 para seleccionar una fuente de interrupción interna.

  • mode – el modo de disparo. Uno de:

    Constante

    Disparo

    ExtInt.IRQ_RISING

    Flanco de subida.

    ExtInt.IRQ_FALLING

    Flanco de bajada.

    ExtInt.IRQ_RISING_FALLING

    Flanco de subida o de bajada.

  • pull – la configuración de resistencia del pin. Una de pyb.Pin.PULL_NONE, pyb.Pin.PULL_UP o pyb.Pin.PULL_DOWN.

  • callback – objeto invocable que se ejecuta al producirse el disparo. Debe aceptar exactamente un argumento: el número de línea EXTI que se activó.

Métodos de clase

classmethod regs() None

Vuelca el contenido de los registros del periférico EXTI (para depuración).

Métodos

disable() None

Deshabilita la interrupción asociada a este objeto ExtInt. Útil para el antirrebote por software.

enable() None

Vuelve a habilitar una interrupción previamente deshabilitada con disable().

line() int

Devuelve el número de línea EXTI al que está asignado este objeto.

swint() None

Dispara la función de retorno (callback) por software (como si el flanco configurado hubiera ocurrido en la línea).

Constantes

IRQ_RISING: int

Dispara una interrupción en un flanco de subida. Se ejecuta la función de retorno (callback) de Python.

IRQ_FALLING: int

Dispara una interrupción en un flanco de bajada. Se ejecuta la función de retorno (callback) de Python.

IRQ_RISING_FALLING: int

Dispara una interrupción en cualquiera de los dos flancos. Se ejecuta la función de retorno (callback) de Python.

EVT_RISING: int

Enruta un flanco de subida a la entrada de eventos del Cortex. No se invoca ninguna función de retorno (callback) de Python; está pensado para usarse con la instrucción WFE en código de bajo consumo.

EVT_FALLING: int

Enruta un flanco de bajada a la entrada de eventos del Cortex. No se invoca ninguna función de retorno (callback) de Python.

EVT_RISING_FALLING: int

Enruta cualquiera de los dos flancos a la entrada de eventos del Cortex. No se invoca ninguna función de retorno (callback) de Python.