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 線可對應到 PA0PB0PC0 或其他任何埠 A 到埠 K 的接腳 0,但一次只能對應一個。

範例:

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

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

之後 pin 上的每個下降邊緣都會呼叫 callbackExtInt 會自動將該 GPIO 線設定為輸入;你不需要自己做這件事。

備註

機械式按鈕會「彈跳」,單一次的按下或放開常會產生多個邊緣。相關技術可參閱例如 這份去彈跳入門文件

在同一接腳上註冊兩個回呼函式會引發例外。

pin 以整數傳入,則會假定它用來識別其中一條內部中斷線,且必須 >= 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 物件、接腳名稱字串,或介於 16-21 範圍內、用來選擇內部中斷來源的整數。

  • mode —— 觸發模式。為下列其中之一:

    常數

    觸發

    ExtInt.IRQ_RISING

    上升邊緣。

    ExtInt.IRQ_FALLING

    下降邊緣。

    ExtInt.IRQ_RISING_FALLING

    上升或下降邊緣皆可。

  • pull —— 接腳的上下拉設定。為 pyb.Pin.PULL_NONEpyb.Pin.PULL_UPpyb.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 回呼函式。