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 回呼函式。