ExtInt osztály – I/O lábak konfigurálása külső eseményekre történő megszakításhoz

Az STM32 MCU-k a külső megszakításvezérlőt (EXTI) két tartományra osztják: a 0-15 vonalakat GPIO lábak vezérlik, a 15 feletti vonalak pedig belső forrásokhoz (RTC riasztás, RTC ébresztés, USB ébresztés stb.) vannak kötve. A vonalak összesített száma és a 15 feletti belső vonalak hozzárendelése MCU-specifikus; a pontos hozzárendelésekért lásd az OpenMV Cam MCU-jának referencia-kézikönyvében az EXTI szakaszt.

Minden N GPIO vonalat egyszerre csak egy GPIO porton lévő PxN láb vezérelhet – például a 0-s vonal leképezhető a PA0, PB0, PC0 lábakra vagy az A-portól a K-portig bármely más port 0-s lábára, de egyszerre csak egyre.

Példa:

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

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

Ezután a pin minden lefutó élénél meghívásra kerül a callback. Az ExtInt automatikusan bemenetként konfigurálja a GPIO vonalat; ezt nem kell saját magának elvégeznie.

Megjegyzés

A mechanikus nyomógombok „pattognak”, és egyetlen lenyomás vagy felengedés gyakran több élt is generál. A módszerekről lásd például ezt a pattogásszűrési útmutatót.

Két visszahívás regisztrálása ugyanarra a lábra kivételt vált ki.

Ha a pin egész számként van megadva, a rendszer feltételezi, hogy az a belső megszakításvonalak egyikét azonosítja, és értékének >= 16-nak, valamint az MCU EXTI vonalainak összesített számánál kisebbnek kell lennie. Minden más láb-érték a szabványos láb-leképezőn keresztül kerül feloldásra.

Az IRQ_* módokon felül léteznek EVT_RISING, EVT_FALLING és EVT_RISING_FALLING eseménymódok is, amelyek egy átmenetet a processzor eseménybemenetére irányítanak (a WFE utasítással használva alacsony fogyasztású várakozáshoz). Az EVT_* módok nem hívják meg a Python visszahívást, és alvási / energiagazdálkodási célokra szolgálnak; a hagyományos alkalmazáskódnak az IRQ_* módokat kell használnia.

Konstruktorok

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

ExtInt objektum létrehozása.

  • pin – az a láb, amelyen engedélyezni kell a megszakítást. Lehet egy Pin objektum, egy láb-névként megadott karakterlánc, vagy egy 16-21 tartományba eső egész szám egy belső megszakításforrás kiválasztásához.

  • mode – a kiváltási mód. A következők egyike:

    Konstans

    Kiváltó

    ExtInt.IRQ_RISING

    Felfutó él.

    ExtInt.IRQ_FALLING

    Lefutó él.

    ExtInt.IRQ_RISING_FALLING

    Felfutó vagy lefutó él egyaránt.

  • pull – a láb felhúzási konfigurációja. A pyb.Pin.PULL_NONE, pyb.Pin.PULL_UP vagy pyb.Pin.PULL_DOWN egyike.

  • callback – a kiváltáskor meghívott hívható objektum. Pontosan egy argumentumot kell elfogadnia: a kiváltott EXTI vonal számát.

Osztálymetódusok

classmethod regs() None

Az EXTI periféria regisztereinek tartalmát írja ki (hibakeresés céljából).

Metódusok

disable() None

Az ehhez az ExtInt objektumhoz tartozó megszakítás letiltása. Hasznos szoftveres pattogásszűréshez.

enable() None

Egy korábban a disable() segítségével letiltott megszakítás újra-engedélyezése.

line() int

Visszaadja azt az EXTI vonalszámot, amelyre ez az objektum le van képezve.

swint() None

A visszahívás kiváltása szoftverből (mintha a konfigurált él következett volna be a vonalon).

Konstansok

IRQ_RISING: int

Megszakítás kiváltása felfutó élnél. A Python visszahívás lefut.

IRQ_FALLING: int

Megszakítás kiváltása lefutó élnél. A Python visszahívás lefut.

IRQ_RISING_FALLING: int

Megszakítás kiváltása bármelyik élnél. A Python visszahívás lefut.

EVT_RISING: int

Felfutó él irányítása a Cortex eseménybemenetére. Nem hívódik meg Python visszahívás; a WFE utasítással való használatra szolgál alacsony fogyasztású kódban.

EVT_FALLING: int

Lefutó él irányítása a Cortex eseménybemenetére. Nem hívódik meg Python visszahívás.

EVT_RISING_FALLING: int

Bármelyik él irányítása a Cortex eseménybemenetére. Nem hívódik meg Python visszahívás.