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