MicroPython 中断支持大全:树莓派 Pico 能用哪些中断?不能用哪些?

1.具有中断功能的外设

在之前 MicroPython 针对于树莓派 Pico 的版本中(以 v1.23.0 为例),只有以下外设具有中断功能:

外设 中断方法的描述
引脚 Pin 类 外部电平变化可触发 GPIO 外部中断,触发中断后调用中断回调函数。
数字音频接口 I2S 类 当缓存 buf 对象被填满或清空时会触发中断,触发中断后调用中断回调函数。
实时时钟 RTC 类 当定时时间到达时触发中断,触发中断后调用中断回调函数。
定时器 Timer 类 定时执行中断回调函数,系统/硬件定时器可设置周期或一次性回调(类似定时中断),
适合周期性任务或超时处理。
直接内存读取 DMA 类 DMA 数据传输完成或接收到 null trigger 时触发中断,触发中断后调用中断回调函数。
状态机 StateMachine 类 状态机相关的中断,可由数字位 0 或 1 触发,触发中断后调用中断回调函数。

可以看到,MicroPython 的 SDK 并没有提供其他外设的中断功能,例如串口的中断接收,但这并不意味着我们不能使用其他方法代替轮询(在 while 循环中使用 UART.any() 判断串口是否有数据可以接收)的方式,我们可以使用定时器定时查询串口状态、多线程、协程等方式更高效无误地完成串口数据地及时接收。

在最新的 MicroPython 针对于树莓派 Pico 的版本(以 v1.26.0 为例),新增了 I2CTarget 类和 UART 类的中断,如下面表格所示:

外设 中断方法的描述
I2CTarget 类 可以把 Pico(或其他板)配置为 I²C 从机(target),并对多种事件注册 IRQ 回调(包括地址匹配、读/写请求、读/写结束等)。部分事件要求使用 hard IRQ(实时性要求高时需 hard=True)。
UART 类 已在多个端口实现中断触发(包括 rp2),支持的触发类型包括 IRQ_RXIDLEIRQ_RXIRQ_TXIDLEIRQ_BREAK 等(可按端口有差异,rp2 支持 RX、RXIDLE、TXIDLE 等)。

2.串口中断相关控制方法

UART.irq() 是 Pico 配置串口中断的核心方法,用于为指定 UART 实例(如 UART0/UART1)绑定中断处理函数,当串口发生你预设的事件(如接收到字符、接收线空闲)时,会自动触发该函数执行,无需主程序轮询串口状态,大幅提升串口响应效率。

官方提供的串口中断方法如下所示:


image.png

针对树莓派 Pico 对应的​RP2040(表中 “RP2” 行) ​,它支持的串口中断触发源有:

  • IRQ_RXIDLE​:​接收 ≥1 个字符后 RX 线空闲触发(适合处理完整数据段);
  • IRQ_TXIDLE​:​仅当发送消息长度 >5 字符时触发,且触发时仍有 5 个字符待发送;
  • IRQ_BREAK​:​检测到 RX 线 Break 状态触发,触发后需接收有效字符才能再次触发。


posted @ 2026-08-31 16:38  FreakStudio  阅读(13)  评论(0)    收藏  举报