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 线可以映射到 PA0、PB0、PC0 或端口 A 到端口 K 中任意端口的引脚 0,但同一时刻只能映射其中一个。
示例::
def callback(line):
print("line =", line)
extint = pyb.ExtInt(pin, pyb.ExtInt.IRQ_FALLING, pyb.Pin.PULL_UP, callback)
随后 pin 上的每个下降沿都会调用 callback。ExtInt 会自动将该 GPIO 线配置为输入;你无需自己进行该操作。
备注
机械式按键会“抖动”,单次按下或释放往往会产生多个边沿。相关技术请参见例如 这份去抖动入门指南。
在同一引脚上注册两个回调会引发异常。
如果 pin 以整数形式传入,则它被假定为标识某条内部中断线,且必须 >= 16 并小于 MCU 的 EXTI 总线路数。任何其他引脚值都会通过标准引脚映射器进行解析。
除了 IRQ_* 模式外,还有 EVT_RISING、EVT_FALLING 和 EVT_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—— 触发模式。为以下之一:常量
触发
上升沿。
下降沿。
上升沿或下降沿。
pull—— 引脚上下拉配置。为pyb.Pin.PULL_NONE、pyb.Pin.PULL_UP或pyb.Pin.PULL_DOWN之一。callback—— 在触发时被调用的可调用对象。必须恰好接受一个参数:触发的 EXTI 线路号。
类方法¶
方法¶
常量¶