klasa ExtInt – konfiguriranje U/I pinova za prekid na vanjskim događajima#

STM32 MCU-i dijele kontroler vanjskih prekida (EXTI) u dva raspona: linije 0-15 pokreću se s GPIO pinova, a linije iznad 15 vezane su za interne izvore (RTC alarm, RTC buđenje, USB buđenje itd.). Ukupan broj linija i mapiranje internih linija iznad 15 specifični su za MCU; za točne dodjele pogledajte odjeljak EXTI u referentnom priručniku za MCU vaše OpenMV Cam kamere.

Svaku GPIO liniju N može pokretati pin PxN na bilo kojem GPIO portu u danom trenutku – na primjer, linija 0 može se mapirati na PA0, PB0, PC0 ili bilo koji drugi pin 0 od porta A do porta K, ali samo jedan istovremeno.

Primjer:

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

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

Svaki silazni brid na pin zatim poziva callback. ExtInt automatski konfigurira GPIO liniju kao ulaz; to ne morate raditi sami.

Napomena

Mehaničke tipkala „poskakuju” pa jedan pritisak ili otpuštanje često generira više bridova. Vidi na primjer ovaj uvod u uklanjanje poskakivanja za tehnike.

Registriranje dvaju povratnih poziva na istom pinu izaziva iznimku.

Ako se pin proslijedi kao cijeli broj, pretpostavlja se da identificira jednu od internih linija prekida i mora biti >= 16 te ispod ukupnog broja EXTI linija MCU-a. Svaka druga vrijednost pina razrješava se kroz standardni mapirač pinova.

Uz načine rada IRQ_* postoje i načini događaja EVT_RISING, EVT_FALLING i EVT_RISING_FALLING koji usmjeravaju prijelaz na ulaz događaja procesora (koristi se s instrukcijom WFE za čekanje uz nisku potrošnju). Načini EVT_* ne pozivaju Python povratni poziv i namijenjeni su za spavanje / upravljanje napajanjem; uobičajeni aplikacijski kod trebao bi koristiti načine IRQ_*.

Konstruktori#

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

Stvara ExtInt objekt.

  • pin – pin na kojem se omogućuje prekid. Može biti Pin objekt, niz s nazivom pina ili cijeli broj u rasponu 16-21 za odabir internog izvora prekida.

  • mode – način okidanja. Jedan od:

    Konstanta

    Okidanje

    ExtInt.IRQ_RISING

    Uzlazni brid.

    ExtInt.IRQ_FALLING

    Silazni brid.

    ExtInt.IRQ_RISING_FALLING

    Bilo uzlazni bilo silazni brid.

  • pull – konfiguracija povlačenja pina. Jedan od pyb.Pin.PULL_NONE, pyb.Pin.PULL_UP ili pyb.Pin.PULL_DOWN.

  • callback – pozivljivi objekt koji se poziva pri okidanju. Mora prihvatiti točno jedan argument: broj EXTI linije koja se aktivirala.

Klasne metode#

classmethod regs() None#

Ispisuje sadržaj registara EXTI periferije (za otklanjanje pogrešaka).

Metode#

disable() None#

Onemogućuje prekid povezan s ovim ExtInt objektom. Korisno za softversko uklanjanje poskakivanja.

enable() None#

Ponovno omogućuje prekid prethodno onemogućen pomoću disable().

line() int#

Vraća broj EXTI linije na koju je ovaj objekt mapiran.

swint() None#

Okida povratni poziv iz softvera (kao da se na liniji dogodio konfigurirani brid).

Konstante#

IRQ_RISING: int#

Okida prekid na uzlaznom bridu. Pokreće se Python povratni poziv.

IRQ_FALLING: int#

Okida prekid na silaznom bridu. Pokreće se Python povratni poziv.

IRQ_RISING_FALLING: int#

Okida prekid na bilo kojem bridu. Pokreće se Python povratni poziv.

EVT_RISING: int#

Usmjerava uzlazni brid na ulaz događaja Cortexa. Ne poziva se nikakav Python povratni poziv; namijenjeno za upotrebu s instrukcijom WFE u kodu niske potrošnje.

EVT_FALLING: int#

Usmjerava silazni brid na ulaz događaja Cortexa. Ne poziva se nikakav Python povratni poziv.

EVT_RISING_FALLING: int#

Usmjerava bilo koji brid na ulaz događaja Cortexa. Ne poziva se nikakav Python povratni poziv.