klass ExtInt – konfigurera I/O-stift att avbryta vid externa händelser

STM32-MCU:er delar upp den externa avbrottsstyrenheten (EXTI) i två intervall: linjerna 0-15 drivs från GPIO-stift, och linjerna över 15 är knutna till interna källor (RTC-larm, RTC-väckning, USB-väckning osv.). Det totala antalet linjer och mappningen av de interna linjerna över 15 är MCU-specifika; se EXTI-avsnittet i referensmanualen för OpenMV Cam:s MCU för de exakta tilldelningarna.

Varje GPIO-linje N kan drivas av stift PxN på en GPIO-port åt gången – till exempel kan linje 0 mappas till PA0, PB0, PC0 eller vilket annat stift 0 som helst på port A till port K, men bara en åt gången.

Exempel:

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

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

Varje fallande flank på pin anropar sedan callback. ExtInt konfigurerar automatiskt GPIO-linjen som en ingång; du behöver inte göra det själv.

Anteckning

Mekaniska tryckknappar ”studsar” och en enda tryckning eller släppning genererar ofta flera flanker. Se till exempel denna introduktion till avstudsning för tekniker.

Att registrera två återanrop på samma stift ger upphov till ett undantag.

Om pin skickas som ett heltal antas det identifiera en av de interna avbrottslinjerna och måste vara >= 16 och under MCU:ns totala antal EXTI-linjer. Alla andra stiftvärden löses upp via den vanliga stiftmapparen.

Förutom IRQ_*-lägena finns det händelselägena EVT_RISING, EVT_FALLING och EVT_RISING_FALLING som dirigerar en övergång till processorns händelseingång (används med WFE-instruktionen för lågeffektsväntan). EVT_*-lägena anropar inte Python-återanropet och är avsedda för viloläge / strömhantering; vanlig applikationskod bör använda IRQ_*-lägena.

Konstruktorer

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

Skapa ett ExtInt-objekt.

  • pin – stiftet att aktivera avbrottet på. Kan vara ett Pin-objekt, en stiftnamnssträng eller ett heltal i intervallet 16-21 för att välja en intern avbrottskälla.

  • mode – utlösningsläget. Ett av:

    Konstant

    Utlösning

    ExtInt.IRQ_RISING

    Stigande flank.

    ExtInt.IRQ_FALLING

    Fallande flank.

    ExtInt.IRQ_RISING_FALLING

    Antingen stigande eller fallande flank.

  • pull – stiftets pull-konfiguration. En av pyb.Pin.PULL_NONE, pyb.Pin.PULL_UP eller pyb.Pin.PULL_DOWN.

  • callback – anropbar funktion som anropas vid utlösningen. Måste acceptera exakt ett argument: numret på den EXTI-linje som utlöstes.

Klassmetoder

classmethod regs() None

Dumpa innehållet i EXTI-kringutrustningens register (för felsökning).

Metoder

disable() None

Inaktivera avbrottet som hör till detta ExtInt-objekt. Användbart för avstudsning i programvara.

enable() None

Återaktivera ett avbrott som tidigare inaktiverats med disable().

line() int

Returnera numret på den EXTI-linje som detta objekt är mappat till.

swint() None

Utlös återanropet från programvara (som om den konfigurerade flanken hade inträffat på linjen).

Konstanter

IRQ_RISING: int

Utlös ett avbrott på en stigande flank. Python-återanropet körs.

IRQ_FALLING: int

Utlös ett avbrott på en fallande flank. Python-återanropet körs.

IRQ_RISING_FALLING: int

Utlös ett avbrott på endera flanken. Python-återanropet körs.

EVT_RISING: int

Dirigera en stigande flank till Cortex-händelseingången. Inget Python-återanrop anropas; avsett för användning med WFE-instruktionen i lågeffektskod.

EVT_FALLING: int

Dirigera en fallande flank till Cortex-händelseingången. Inget Python-återanrop anropas.

EVT_RISING_FALLING: int

Dirigera endera flanken till Cortex-händelseingången. Inget Python-återanrop anropas.