class ExtInt – E/A-Pins zum Auslösen von Interrupts bei externen Ereignissen konfigurieren

STM32-MCUs teilen den externen Interrupt-Controller (EXTI) in zwei Bereiche auf: Die Leitungen 0-15 werden von GPIO-Pins angesteuert, und die Leitungen oberhalb von 15 sind an interne Quellen gebunden (RTC-Alarm, RTC-Wakeup, USB-Wakeup usw.). Die Gesamtzahl der Leitungen und die Zuordnung der internen Leitungen oberhalb von 15 sind MCU-spezifisch; konsultieren Sie den EXTI-Abschnitt des Referenzhandbuchs für die MCU der OpenMV Cam, um die genauen Zuweisungen zu erhalten.

Jede GPIO-Leitung N kann jeweils von Pin PxN an einem beliebigen GPIO-Port angesteuert werden – zum Beispiel kann Leitung 0 auf PA0, PB0, PC0 oder einen beliebigen anderen Pin 0 von Port A bis Port K abgebildet werden, jedoch immer nur einer zur selben Zeit.

Beispiel:

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

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

Jede fallende Flanke an pin ruft dann callback auf. ExtInt konfiguriert die GPIO-Leitung automatisch als Eingang; das müssen Sie nicht selbst tun.

Bemerkung

Mechanische Drucktaster „prellen“, und ein einzelnes Drücken oder Loslassen erzeugt oft mehrere Flanken. Siehe zum Beispiel diese Einführung zum Entprellen für entsprechende Techniken.

Das Registrieren von zwei Callbacks am selben Pin löst eine Ausnahme aus.

Wenn pin als Ganzzahl übergeben wird, wird angenommen, dass sie eine der internen Interrupt-Leitungen identifiziert, und sie muss >= 16 und kleiner als die Gesamtzahl der EXTI-Leitungen der MCU sein. Jeder andere Pin-Wert wird über den Standard-Pin-Mapper aufgelöst.

Zusätzlich zu den IRQ_*-Modi gibt es die Ereignismodi EVT_RISING, EVT_FALLING und EVT_RISING_FALLING, die einen Übergang an den Ereigniseingang des Prozessors leiten (verwendet mit der WFE-Instruktion für stromsparendes Warten). Die EVT_*-Modi rufen den Python-Callback nicht auf und sind für die Verwendung beim Schlafen / bei der Energieverwaltung gedacht; gewöhnlicher Anwendungscode sollte die IRQ_*-Modi verwenden.

Konstruktoren

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

Erstellt ein ExtInt-Objekt.

  • pin – der Pin, an dem der Interrupt aktiviert werden soll. Kann ein Pin-Objekt, eine Pin-Namens-Zeichenkette oder eine Ganzzahl im Bereich 16-21 sein, um eine interne Interrupt-Quelle auszuwählen.

  • mode – der Auslösemodus. Einer von:

    Konstante

    Auslöser

    ExtInt.IRQ_RISING

    Steigende Flanke.

    ExtInt.IRQ_FALLING

    Fallende Flanke.

    ExtInt.IRQ_RISING_FALLING

    Entweder steigende oder fallende Flanke.

  • pull – die Pull-Konfiguration des Pins. Einer von pyb.Pin.PULL_NONE, pyb.Pin.PULL_UP oder pyb.Pin.PULL_DOWN.

  • callback – aufrufbares Objekt, das beim Auslösen aufgerufen wird. Muss genau ein Argument akzeptieren: die EXTI-Leitungsnummer, die ausgelöst hat.

Klassenmethoden

classmethod regs() None

Gibt den Inhalt der EXTI-Peripherieregister aus (zum Debuggen).

Methoden

disable() None

Deaktiviert den mit diesem ExtInt-Objekt verbundenen Interrupt. Nützlich für das Entprellen per Software.

enable() None

Reaktiviert einen zuvor mit disable() deaktivierten Interrupt.

line() int

Gibt die EXTI-Leitungsnummer zurück, auf die dieses Objekt abgebildet ist.

swint() None

Löst den Callback per Software aus (so, als ob die konfigurierte Flanke auf der Leitung aufgetreten wäre).

Konstanten

IRQ_RISING: int

Löst bei einer steigenden Flanke einen Interrupt aus. Der Python-Callback wird ausgeführt.

IRQ_FALLING: int

Löst bei einer fallenden Flanke einen Interrupt aus. Der Python-Callback wird ausgeführt.

IRQ_RISING_FALLING: int

Löst bei beiden Flanken einen Interrupt aus. Der Python-Callback wird ausgeführt.

EVT_RISING: int

Leitet eine steigende Flanke an den Cortex-Ereigniseingang. Es wird kein Python-Callback aufgerufen; gedacht für die Verwendung mit der WFE-Instruktion in stromsparendem Code.

EVT_FALLING: int

Leitet eine fallende Flanke an den Cortex-Ereigniseingang. Es wird kein Python-Callback aufgerufen.

EVT_RISING_FALLING: int

Leitet beide Flanken an den Cortex-Ereigniseingang. Es wird kein Python-Callback aufgerufen.