klasa ExtInt – konfiguracja pinów I/O w celu generowania przerwań przy zdarzeniach zewnętrznych#

Mikrokontrolery STM32 dzielą kontroler przerwań zewnętrznych (EXTI) na dwa zakresy: linie 0-15 są sterowane z pinów GPIO, a linie powyżej 15 są przypisane do źródeł wewnętrznych (alarm RTC, wybudzanie RTC, wybudzanie USB itd.). Łączna liczba linii oraz mapowanie linii wewnętrznych powyżej 15 są specyficzne dla danego MCU; dokładne przypisania znajdziesz w sekcji EXTI podręcznika referencyjnego MCU danej kamery OpenMV Cam.

Każda linia GPIO N może być sterowana przez pin PxN dowolnego pojedynczego portu GPIO naraz – na przykład linia 0 może być odwzorowana na PA0, PB0, PC0 lub dowolny inny pin 0 portów od A do K, ale tylko jeden naraz.

Przykład:

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

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

Każde zbocze opadające na pin wywołuje wówczas callback. ExtInt automatycznie konfiguruje linię GPIO jako wejście; nie musisz robić tego samodzielnie.

Informacja

Mechaniczne przyciski „drgają” i pojedyncze naciśnięcie lub zwolnienie często generuje wiele zboczy. Techniki radzenia sobie z tym opisano na przykład w tym wprowadzeniu do eliminacji drgań styków.

Zarejestrowanie dwóch wywołań zwrotnych na tym samym pinie powoduje zgłoszenie wyjątku.

Jeśli pin zostanie przekazany jako liczba całkowita, przyjmuje się, że identyfikuje jedną z wewnętrznych linii przerwań i musi być >= 16 oraz mniejszy niż łączna liczba linii EXTI danego MCU. Każda inna wartość pinu jest rozwiązywana za pomocą standardowego mappera pinów.

Oprócz trybów IRQ_* istnieją tryby zdarzeń EVT_RISING, EVT_FALLING i EVT_RISING_FALLING, które kierują przejście na wejście zdarzeń procesora (używane z instrukcją WFE do oczekiwania o niskim poborze mocy). Tryby EVT_* nie wywołują wywołania zwrotnego w Pythonie i są przeznaczone do zastosowań związanych z uśpieniem / zarządzaniem energią; zwykły kod aplikacji powinien używać trybów IRQ_*.

Konstruktory#

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

Tworzy obiekt ExtInt.

  • pin – pin, na którym ma być włączone przerwanie. Może być obiektem Pin, ciągiem znaków z nazwą pinu lub liczbą całkowitą z zakresu 16-21 wybierającą wewnętrzne źródło przerwania.

  • mode – tryb wyzwalania. Jeden z:

    Stała

    Wyzwalanie

    ExtInt.IRQ_RISING

    Zbocze narastające.

    ExtInt.IRQ_FALLING

    Zbocze opadające.

    ExtInt.IRQ_RISING_FALLING

    Zbocze narastające lub opadające.

  • pull – konfiguracja podciągania pinu. Jedna z pyb.Pin.PULL_NONE, pyb.Pin.PULL_UP lub pyb.Pin.PULL_DOWN.

  • callback – obiekt wywoływalny uruchamiany przy wyzwoleniu. Musi przyjmować dokładnie jeden argument: numer linii EXTI, która zadziałała.

Metody klasowe#

classmethod regs() None#

Zrzuca zawartość rejestrów urządzenia peryferyjnego EXTI (do celów debugowania).

Metody#

disable() None#

Wyłącza przerwanie powiązane z tym obiektem ExtInt. Przydatne do programowej eliminacji drgań styków.

enable() None#

Ponownie włącza przerwanie wyłączone wcześniej za pomocą disable().

line() int#

Zwraca numer linii EXTI, do której odwzorowany jest ten obiekt.

swint() None#

Wyzwala wywołanie zwrotne programowo (tak jakby na linii wystąpiło skonfigurowane zbocze).

Stałe#

IRQ_RISING: int#

Wyzwala przerwanie na zboczu narastającym. Uruchamiane jest wywołanie zwrotne w Pythonie.

IRQ_FALLING: int#

Wyzwala przerwanie na zboczu opadającym. Uruchamiane jest wywołanie zwrotne w Pythonie.

IRQ_RISING_FALLING: int#

Wyzwala przerwanie na dowolnym zboczu. Uruchamiane jest wywołanie zwrotne w Pythonie.

EVT_RISING: int#

Kieruje zbocze narastające na wejście zdarzeń Cortex. Nie jest wywoływane żadne wywołanie zwrotne w Pythonie; przeznaczone do użycia z instrukcją WFE w kodzie o niskim poborze mocy.

EVT_FALLING: int#

Kieruje zbocze opadające na wejście zdarzeń Cortex. Nie jest wywoływane żadne wywołanie zwrotne w Pythonie.

EVT_RISING_FALLING: int#

Kieruje dowolne zbocze na wejście zdarzeń Cortex. Nie jest wywoływane żadne wywołanie zwrotne w Pythonie.