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á.