class ExtInt – 외부 이벤트에 인터럽트하도록 I/O 핀 구성

STM32 MCU는 외부 인터럽트 컨트롤러(EXTI)를 두 범위로 나눕니다. 라인 0-15는 GPIO 핀에서 구동되고, 15보다 높은 라인은 내부 소스(RTC 알람, RTC 웨이크업, USB 웨이크업 등)에 연결됩니다. 전체 라인 수와 15보다 높은 내부 라인의 매핑은 MCU마다 다릅니다. 정확한 할당에 대해서는 OpenMV Cam의 MCU에 대한 레퍼런스 매뉴얼의 EXTI 섹션을 참조하십시오.

각 GPIO 라인 N은 한 번에 임의의 한 GPIO 포트의 핀 PxN에 의해 구동될 수 있습니다. 예를 들어 라인 0은 PA0, PB0, PC0 또는 포트 A부터 포트 K까지의 다른 임의의 핀 0에 매핑될 수 있지만, 한 번에 하나만 가능합니다.

예시:

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

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

그러면 pin의 모든 하강 에지가 callback을 호출합니다. ExtInt는 GPIO 라인을 입력으로 자동 구성하므로 직접 그렇게 할 필요가 없습니다.

참고

기계식 푸시버튼은 “바운스”하여 한 번의 누름이나 떼기가 종종 여러 에지를 생성합니다. 관련 기법에 대해서는 예를 들어 이 디바운싱 입문서를 참조하십시오.

같은 핀에 두 개의 콜백을 등록하면 예외가 발생합니다.

pin이 정수로 전달되면 내부 인터럽트 라인 중 하나를 식별하는 것으로 간주되며 >= 16이고 MCU의 전체 EXTI 라인 수 미만이어야 합니다. 그 외의 핀 값은 표준 핀 매퍼를 통해 해석됩니다.

IRQ_* 모드 외에도 전환을 프로세서의 이벤트 입력으로 라우팅하는 EVT_RISING, EVT_FALLING, EVT_RISING_FALLING 이벤트 모드가 있습니다(저전력 대기를 위한 WFE 명령어와 함께 사용됨). EVT_* 모드는 Python 콜백을 호출하지 않으며 절전 / 전원 관리 용도로 사용됩니다. 일반적인 애플리케이션 코드는 IRQ_* 모드를 사용해야 합니다.

생성자

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

ExtInt 객체를 생성합니다.

  • pin – 인터럽트를 활성화할 핀. Pin 객체, 핀 이름 문자열, 또는 내부 인터럽트 소스를 선택하는 16-21 범위의 정수일 수 있습니다.

  • mode – 트리거 모드. 다음 중 하나:

    상수

    트리거

    ExtInt.IRQ_RISING

    상승 에지.

    ExtInt.IRQ_FALLING

    하강 에지.

    ExtInt.IRQ_RISING_FALLING

    상승 또는 하강 에지.

  • pull – 핀 풀 구성. pyb.Pin.PULL_NONE, pyb.Pin.PULL_UP 또는 pyb.Pin.PULL_DOWN 중 하나.

  • callback – 트리거 시 호출되는 호출 가능 객체. 정확히 하나의 인수, 즉 발생한 EXTI 라인 번호를 받아야 합니다.

클래스 메서드

classmethod regs() None

EXTI 주변장치 레지스터의 내용을 덤프합니다(디버깅용).

메서드

disable() None

ExtInt 객체와 연관된 인터럽트를 비활성화합니다. 소프트웨어 디바운싱에 유용합니다.

enable() None

disable()로 이전에 비활성화한 인터럽트를 다시 활성화합니다.

line() int

이 객체가 매핑된 EXTI 라인 번호를 반환합니다.

swint() None

소프트웨어에서 콜백을 트리거합니다(구성된 에지가 라인에서 발생한 것처럼).

상수

IRQ_RISING: int

상승 에지에서 인터럽트를 트리거합니다. Python 콜백이 실행됩니다.

IRQ_FALLING: int

하강 에지에서 인터럽트를 트리거합니다. Python 콜백이 실행됩니다.

IRQ_RISING_FALLING: int

양쪽 에지에서 인터럽트를 트리거합니다. Python 콜백이 실행됩니다.

EVT_RISING: int

상승 에지를 Cortex 이벤트 입력으로 라우팅합니다. Python 콜백은 호출되지 않으며, 저전력 코드에서 WFE 명령어와 함께 사용하기 위한 것입니다.

EVT_FALLING: int

하강 에지를 Cortex 이벤트 입력으로 라우팅합니다. Python 콜백은 호출되지 않습니다.

EVT_RISING_FALLING: int

양쪽 에지를 Cortex 이벤트 입력으로 라우팅합니다. Python 콜백은 호출되지 않습니다.