class ExtInt -- 外部イベントで割り込むように I/O ピンを構成する

STM32 MCU は外部割り込みコントローラ(EXTI)を 2 つの範囲に分割します。ライン 0~15 は GPIO ピンから駆動され、16 を超えるラインは内部ソース(RTC アラーム、RTC ウェイクアップ、USB ウェイクアップなど)に結びつけられています。ラインの総数と 16 を超える内部ラインのマッピングは MCU 固有です。正確な割り当てについては、OpenMV Cam の MCU のリファレンスマニュアルの EXTI セクションを参照してください。

各 GPIO ライン N は、一度にいずれか 1 つの GPIO ポートのピン PxN によって駆動できます。たとえば、ライン 0 は PA0PB0PC0、またはポート A からポート K までの他の任意のピン 0 にマッピングできますが、一度に 1 つだけです。

例:

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

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

pin で立ち下がりエッジが発生するたびに callback が呼び出されます。ExtInt は GPIO ラインを自動的に入力として構成するため、自分で構成する必要はありません。

注釈

機械式の押しボタンは「チャタリング」を起こし、1 回の押下または解放でしばしば複数のエッジが生成されます。手法については、たとえば このデバウンス入門 を参照してください。

同じピンに 2 つのコールバックを登録すると例外が発生します。

pin が整数として渡された場合、それは内部割り込みラインの 1 つを識別するものとみなされ、>= 16 であり、かつ MCU の EXTI ラインの総数未満でなければなりません。その他のピン値は標準のピンマッパーを通じて解決されます。

IRQ_* モードに加えて、遷移をプロセッサのイベント入力にルーティングする EVT_RISINGEVT_FALLINGEVT_RISING_FALLING イベントモードがあります(低電力待機のための WFE 命令とともに使用されます)。EVT_* モードは Python コールバックを呼び出さず、スリープや電源管理での使用を意図しています。通常のアプリケーションコードでは IRQ_* モードを使用してください。

コンストラクタ

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

ExtInt オブジェクトを作成します。

  • pin -- 割り込みを有効にするピン。Pin オブジェクト、ピン名文字列、または内部割り込みソースを選択する 1621 の範囲の整数を指定できます。

  • mode -- トリガーモード。次のいずれか。

    定数

    トリガー

    ExtInt.IRQ_RISING

    立ち上がりエッジ。

    ExtInt.IRQ_FALLING

    立ち下がりエッジ。

    ExtInt.IRQ_RISING_FALLING

    立ち上がりまたは立ち下がりのいずれかのエッジ。

  • pull -- ピンのプル構成。pyb.Pin.PULL_NONEpyb.Pin.PULL_UPpyb.Pin.PULL_DOWN のいずれか。

  • callback -- トリガー時に呼び出される呼び出し可能オブジェクト。ちょうど 1 つの引数(発火した 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 コールバックは呼び出されません。