class ExtInt – I/O-pinnen configureren om te interrupten op externe gebeurtenissen

STM32-MCU’s verdelen de externe-interruptcontroller (EXTI) in twee bereiken: lijnen 0-15 worden aangestuurd vanaf GPIO-pinnen, en de lijnen boven 15 zijn gekoppeld aan interne bronnen (RTC-alarm, RTC-wakeup, USB-wakeup, enz.). Het totale aantal lijnen en de toewijzing van interne lijnen boven 15 zijn MCU-specifiek; raadpleeg het EXTI-gedeelte van de referentiehandleiding voor de MCU van de OpenMV Cam voor de exacte toewijzingen.

Elke GPIO-lijn N kan worden aangestuurd door pin PxN op slechts één GPIO-poort tegelijk – zo kan lijn 0 bijvoorbeeld worden toegewezen aan PA0, PB0, PC0 of een willekeurige andere pin 0 van poort A tot en met poort K, maar slechts één tegelijk.

Voorbeeld:

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

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

Elke dalende flank op pin roept vervolgens callback aan. ExtInt configureert de GPIO-lijn automatisch als ingang; dat hoeft u niet zelf te doen.

Notitie

Mechanische drukknoppen “stuiteren” en één druk of loslaten genereert vaak meerdere flanken. Zie bijvoorbeeld deze inleiding tot debouncing voor technieken.

Het registreren van twee callbacks op dezelfde pin werpt een uitzondering op.

Als pin als geheel getal wordt doorgegeven, wordt aangenomen dat het een van de interne interruptlijnen identificeert en moet het >= 16 zijn en lager dan het totale aantal EXTI-lijnen van de MCU. Elke andere pin-waarde wordt opgelost via de standaard pin-mapper.

Naast de IRQ_*-modi zijn er de gebeurtenismodi EVT_RISING, EVT_FALLING en EVT_RISING_FALLING die een transitie naar de gebeurtenisingang van de processor routeren (gebruikt met de WFE-instructie voor het wachten met laag vermogen). De EVT_*-modi roepen de Python-callback niet aan en zijn bedoeld voor gebruik bij slaapstand / energiebeheer; gewone applicatiecode moet de IRQ_*-modi gebruiken.

Constructors

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

Maak een ExtInt-object aan.

  • pin – de pin waarop de interrupt moet worden ingeschakeld. Kan een Pin-object zijn, een pin-naamstring, of een geheel getal in het bereik 16-21 om een interne interruptbron te selecteren.

  • mode – de triggermodus. Een van:

    Constante

    Trigger

    ExtInt.IRQ_RISING

    Stijgende flank.

    ExtInt.IRQ_FALLING

    Dalende flank.

    ExtInt.IRQ_RISING_FALLING

    Zowel stijgende als dalende flank.

  • pull – de pull-configuratie van de pin. Een van pyb.Pin.PULL_NONE, pyb.Pin.PULL_UP of pyb.Pin.PULL_DOWN.

  • callback – aanroepbaar object dat bij de trigger wordt aangeroepen. Moet precies één argument accepteren: het EXTI-lijnnummer dat afging.

Class methods

classmethod regs() None

Dump de inhoud van de EXTI-randapparaatregisters (voor debugging).

Methods

disable() None

Schakel de interrupt uit die aan dit ExtInt-object is gekoppeld. Handig voor softwarematige debouncing.

enable() None

Schakel een interrupt die eerder met disable() is uitgeschakeld opnieuw in.

line() int

Geef het EXTI-lijnnummer terug waaraan dit object is gekoppeld.

swint() None

Trigger de callback vanuit software (alsof de geconfigureerde flank op de lijn was opgetreden).

Constants

IRQ_RISING: int

Trigger een interrupt op een stijgende flank. De Python-callback wordt uitgevoerd.

IRQ_FALLING: int

Trigger een interrupt op een dalende flank. De Python-callback wordt uitgevoerd.

IRQ_RISING_FALLING: int

Trigger een interrupt op beide flanken. De Python-callback wordt uitgevoerd.

EVT_RISING: int

Route een stijgende flank naar de gebeurtenisingang van de Cortex. Er wordt geen Python-callback aangeroepen; bedoeld voor gebruik met de WFE-instructie in code met laag vermogen.

EVT_FALLING: int

Route een dalende flank naar de gebeurtenisingang van de Cortex. Er wordt geen Python-callback aangeroepen.

EVT_RISING_FALLING: int

Route beide flanken naar de gebeurtenisingang van de Cortex. Er wordt geen Python-callback aangeroepen.