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 objetoPin, una cadena con el nombre del pin, o un entero en el rango16-21para seleccionar una fuente de interrupción interna.mode– el modo de disparo. Uno de:Constante
Disparo
Flanco de subida.
Flanco de bajada.
Flanco de subida o de bajada.
pull– la configuración de resistencia del pin. Una depyb.Pin.PULL_NONE,pyb.Pin.PULL_UPopyb.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¶
Métodos¶
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
WFEen código de bajo consumo.