classe ExtInt – configure les broches d’E/S pour interrompre sur des événements externes

Les MCU STM32 divisent le contrôleur d’interruptions externes (EXTI) en deux plages : les lignes 0-15 sont pilotées par les broches GPIO, et les lignes au-dessus de 15 sont liées à des sources internes (alarme RTC, réveil RTC, réveil USB, etc.). Le nombre total de lignes et la correspondance des lignes internes au-dessus de 15 sont spécifiques au MCU ; consultez la section EXTI du manuel de référence du MCU de l’OpenMV Cam pour connaître les affectations exactes.

Chaque ligne GPIO N peut être pilotée par la broche PxN d’un seul port GPIO à la fois – par exemple, la ligne 0 peut correspondre à PA0, PB0, PC0 ou à toute autre broche 0 des ports A à K, mais une seule à la fois.

Exemple

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

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

Chaque front descendant sur pin invoque alors callback. ExtInt configure automatiquement la ligne GPIO comme une entrée ; vous n’avez pas besoin de le faire vous-même.

Note

Les boutons-poussoirs mécaniques « rebondissent » et un simple appui ou relâchement génère souvent plusieurs fronts. Voir par exemple cette introduction à l’anti-rebond pour des techniques.

L’enregistrement de deux fonctions de rappel sur la même broche lève une exception.

Si pin est passé sous forme d’entier, on suppose qu’il identifie l’une des lignes d’interruption internes et il doit être >= 16 et inférieur au nombre total de lignes EXTI du MCU. Toute autre valeur de broche est résolue via le mappeur de broches standard.

En plus des modes IRQ_*, il existe les modes d’événement EVT_RISING, EVT_FALLING et EVT_RISING_FALLING qui routent une transition vers l’entrée d’événement du processeur (utilisée avec l’instruction WFE pour une attente à faible consommation). Les modes EVT_* n’invoquent pas la fonction de rappel Python et sont destinés à un usage de mise en veille / gestion de l’alimentation ; le code applicatif ordinaire devrait utiliser les modes IRQ_*.

Constructeurs

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

Crée un objet ExtInt.

  • pin – la broche sur laquelle activer l’interruption. Peut être un objet Pin, une chaîne de nom de broche, ou un entier dans la plage 16-21 pour sélectionner une source d’interruption interne.

  • mode – le mode de déclenchement. L’un des suivants :

    Constante

    Déclencheur

    ExtInt.IRQ_RISING

    Front montant.

    ExtInt.IRQ_FALLING

    Front descendant.

    ExtInt.IRQ_RISING_FALLING

    Front montant ou descendant.

  • pull – la configuration de tirage de la broche. L’une des valeurs pyb.Pin.PULL_NONE, pyb.Pin.PULL_UP ou pyb.Pin.PULL_DOWN.

  • callback – l’appelable invoqué lors du déclenchement. Doit accepter exactement un argument : le numéro de ligne EXTI qui s’est déclenchée.

Méthodes de classe

classmethod regs() None

Affiche le contenu des registres du périphérique EXTI (pour le débogage).

Méthodes

disable() None

Désactive l’interruption associée à cet objet ExtInt. Utile pour l’anti-rebond logiciel.

enable() None

Réactive une interruption précédemment désactivée avec disable().

line() int

Renvoie le numéro de ligne EXTI auquel cet objet est mappé.

swint() None

Déclenche la fonction de rappel par logiciel (comme si le front configuré s’était produit sur la ligne).

Constantes

IRQ_RISING: int

Déclenche une interruption sur un front montant. La fonction de rappel Python s’exécute.

IRQ_FALLING: int

Déclenche une interruption sur un front descendant. La fonction de rappel Python s’exécute.

IRQ_RISING_FALLING: int

Déclenche une interruption sur l’un ou l’autre front. La fonction de rappel Python s’exécute.

EVT_RISING: int

Route un front montant vers l’entrée d’événement Cortex. Aucune fonction de rappel Python n’est invoquée ; destiné à être utilisé avec l’instruction WFE dans le code à faible consommation.

EVT_FALLING: int

Route un front descendant vers l’entrée d’événement Cortex. Aucune fonction de rappel Python n’est invoquée.

EVT_RISING_FALLING: int

Route l’un ou l’autre front vers l’entrée d’événement Cortex. Aucune fonction de rappel Python n’est invoquée.