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 对象。

类方法

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 回调。