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 einPin-Objekt, eine Pin-Namens-Zeichenkette oder eine Ganzzahl im Bereich16-21sein, um eine interne Interrupt-Quelle auszuwählen.mode– der Auslösemodus. Einer von:Konstante
Auslöser
Steigende Flanke.
Fallende Flanke.
Entweder steigende oder fallende Flanke.
pull– die Pull-Konfiguration des Pins. Einer vonpyb.Pin.PULL_NONE,pyb.Pin.PULL_UPoderpyb.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¶
Methoden¶
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.