classe ExtInt – configura pinos de E/S para interromper em eventos externos

Os MCUs STM32 dividem o controlador de interrupção externa (EXTI) em duas faixas: as linhas 0-15 são acionadas a partir de pinos GPIO, e as linhas acima de 15 são vinculadas a fontes internas (alarme do RTC, wakeup do RTC, wakeup do USB, etc.). A contagem total de linhas e o mapeamento das linhas internas acima de 15 são específicos do MCU; consulte a seção EXTI do manual de referência do MCU da OpenMV Cam para obter as atribuições exatas.

Cada linha GPIO N pode ser acionada pelo pino PxN de uma única porta GPIO por vez – por exemplo, a linha 0 pode mapear para PA0, PB0, PC0 ou qualquer outro pino 0 das portas A a K, mas apenas um por vez.

Exemplo:

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

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

Cada borda de descida em pin então invoca callback. O ExtInt configura automaticamente a linha GPIO como entrada; você não precisa fazer isso por conta própria.

Nota

Botões mecânicos de pressão “quicam” (bounce) e um único pressionamento ou liberação frequentemente gera múltiplas bordas. Veja, por exemplo, este manual introdutório de debouncing para técnicas.

Registrar dois callbacks no mesmo pino levanta uma exceção.

Se pin for passado como um inteiro, presume-se que identifica uma das linhas de interrupção internas e deve ser >= 16 e abaixo da contagem total de linhas EXTI do MCU. Qualquer outro valor de pino é resolvido através do mapeador de pinos padrão.

Além dos modos IRQ_*, há os modos de evento EVT_RISING, EVT_FALLING e EVT_RISING_FALLING que roteiam uma transição para a entrada de evento do processador (usada com a instrução WFE para espera de baixo consumo). Os modos EVT_* não invocam o callback Python e são destinados a uso de suspensão / gerenciamento de energia; o código de aplicação comum deve usar os modos IRQ_*.

Construtores

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

Cria um objeto ExtInt.

  • pin – o pino no qual habilitar a interrupção. Pode ser um objeto Pin, uma string com o nome do pino, ou um inteiro na faixa 16-21 para selecionar uma fonte de interrupção interna.

  • mode – o modo de disparo. Um dos seguintes:

    Constante

    Disparo

    ExtInt.IRQ_RISING

    Borda de subida.

    ExtInt.IRQ_FALLING

    Borda de descida.

    ExtInt.IRQ_RISING_FALLING

    Borda de subida ou de descida.

  • pull – a configuração de pull do pino. Um de pyb.Pin.PULL_NONE, pyb.Pin.PULL_UP ou pyb.Pin.PULL_DOWN.

  • callback – chamável invocado no disparo. Deve aceitar exatamente um argumento: o número da linha EXTI que disparou.

Métodos de classe

classmethod regs() None

Despeja o conteúdo dos registradores do periférico EXTI (para depuração).

Métodos

disable() None

Desabilita a interrupção associada a este objeto ExtInt. Útil para debouncing por software.

enable() None

Reabilita uma interrupção previamente desabilitada com disable().

line() int

Retorna o número da linha EXTI à qual este objeto está mapeado.

swint() None

Dispara o callback por software (como se a borda configurada tivesse ocorrido na linha).

Constantes

IRQ_RISING: int

Dispara uma interrupção em uma borda de subida. O callback Python é executado.

IRQ_FALLING: int

Dispara uma interrupção em uma borda de descida. O callback Python é executado.

IRQ_RISING_FALLING: int

Dispara uma interrupção em qualquer borda. O callback Python é executado.

EVT_RISING: int

Roteia uma borda de subida para a entrada de evento do Cortex. Nenhum callback Python é invocado; destinado ao uso com a instrução WFE em código de baixo consumo.

EVT_FALLING: int

Roteia uma borda de descida para a entrada de evento do Cortex. Nenhum callback Python é invocado.

EVT_RISING_FALLING: int

Roteia qualquer borda para a entrada de evento do Cortex. Nenhum callback Python é invocado.