třída ExtInt – konfigurace I/O pinů pro přerušení při externích událostech

MCU STM32 rozdělují řadič externích přerušení (EXTI) do dvou rozsahů: linky 0-15 jsou buzeny z GPIO pinů a linky nad 15 jsou navázány na interní zdroje (alarm RTC, probuzení RTC, probuzení USB atd.). Celkový počet linek a mapování interních linek nad 15 jsou specifické pro daný MCU; přesné přiřazení najdete v sekci EXTI referenčního manuálu MCU vaší OpenMV Cam.

Každá GPIO linka N může být v daném okamžiku buzena pinem PxN na kterémkoli jednom GPIO portu – například linka 0 může mapovat na PA0, PB0, PC0 nebo na kterýkoli pin 0 portu A až K, ale vždy jen jeden najednou.

Příklad:

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

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

Každá sestupná hrana na pin poté vyvolá callback. ExtInt automaticky nakonfiguruje GPIO linku jako vstup; nemusíte to dělat sami.

Poznámka

Mechanická tlačítka „zakmitávají“ a jediné stisknutí nebo uvolnění často vygeneruje více hran. Techniky řešení najdete například v tomto úvodu do odstraňování zákmitů.

Registrace dvou callbacků na stejném pinu vyvolá výjimku.

Pokud je pin předán jako celé číslo, předpokládá se, že identifikuje jednu z interních přerušovacích linek, a musí být >= 16 a menší než celkový počet EXTI linek MCU. Jakákoli jiná hodnota pinu se vyřeší prostřednictvím standardního mapovače pinů.

Kromě režimů IRQ_* existují i režimy událostí EVT_RISING, EVT_FALLING a EVT_RISING_FALLING, které směrují přechod na vstup událostí procesoru (používá se s instrukcí WFE pro nízkopříkonové čekání). Režimy EVT_* nevyvolávají Python callback a jsou určeny pro režim spánku / správu napájení; běžný aplikační kód by měl používat režimy IRQ_*.

Konstruktory

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

Vytvoří objekt ExtInt.

  • pin – pin, na kterém se má přerušení povolit. Může být objekt Pin, řetězec se jménem pinu nebo celé číslo v rozsahu 16-21 pro výběr interního zdroje přerušení.

  • mode – režim spouštění. Jeden z:

    Konstanta

    Spouštěč

    ExtInt.IRQ_RISING

    Náběžná hrana.

    ExtInt.IRQ_FALLING

    Sestupná hrana.

    ExtInt.IRQ_RISING_FALLING

    Náběžná nebo sestupná hrana.

  • pull – konfigurace pull rezistoru pinu. Jeden z pyb.Pin.PULL_NONE, pyb.Pin.PULL_UP nebo pyb.Pin.PULL_DOWN.

  • callback – volatelný objekt vyvolaný při spuštění. Musí přijímat přesně jeden argument: číslo EXTI linky, která se aktivovala.

Metody třídy

classmethod regs() None

Vypíše obsah registrů periferie EXTI (pro ladění).

Metody

disable() None

Zakáže přerušení přidružené k tomuto objektu ExtInt. Užitečné pro softwarové odstraňování zákmitů.

enable() None

Znovu povolí přerušení dříve zakázané metodou disable().

line() int

Vrátí číslo EXTI linky, na kterou je tento objekt namapován.

swint() None

Vyvolá callback ze softwaru (jako by na lince došlo k nakonfigurované hraně).

Konstanty

IRQ_RISING: int

Vyvolá přerušení na náběžné hraně. Python callback se spustí.

IRQ_FALLING: int

Vyvolá přerušení na sestupné hraně. Python callback se spustí.

IRQ_RISING_FALLING: int

Vyvolá přerušení na obou hranách. Python callback se spustí.

EVT_RISING: int

Směruje náběžnou hranu na vstup událostí Cortexu. Žádný Python callback se nevyvolá; určeno pro použití s instrukcí WFE v nízkopříkonovém kódu.

EVT_FALLING: int

Směruje sestupnou hranu na vstup událostí Cortexu. Žádný Python callback se nevyvolá.

EVT_RISING_FALLING: int

Směruje obě hrany na vstup událostí Cortexu. Žádný Python callback se nevyvolá.