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.