class RTC -- 实时时钟¶
RTC 类控制 MCU 的片上实时时钟外设,该外设在复位后仍能保持挂钟时间。
在 STM32 OpenMV Cam 上,machine.RTC 和 pyb.RTC 指向同一个底层对象。
用法示例:
import machine
rtc = machine.RTC()
rtc.datetime((2026, 1, 21, 2, 10, 32, 36, 0))
print(rtc.datetime())
构造函数¶
- class machine.RTC(id: int = 0)¶
返回
RTC单例。id为跨端口兼容性而被接受,但在 OpenMV 支持的端口上只有0是有效的(每个摄像头只有一个 RTC)。下面的方法按哪些 OpenMV 端口提供它们进行分组。
所有 OpenMV 端口上均可用的方法¶
- datetime(datetimetuple: tuple | None = None, /) tuple | None¶
获取或设置当前日期和时间。
不带参数时,以 8 元组
(year, month, day, weekday, hour, minute, second, subseconds)的形式返回当前值。带一个 8 元组参数时,将 RTC 设置为该值。
weekday在 STM32 上为 1 = 星期一到 7 = 星期日,在 mimxrt 上为 0 = 星期一到 6 = 星期日。subseconds在 STM32 上是秒的小数部分,单位为 1/256 秒;在 mimxrt 和 alif 上它始终为0。
仅限 STM32 + mimxrt¶
仅限 STM32¶
- info() int¶
以 32 位整数形式返回打包的 RTC 启动状态。
低 16 位给出 RTC 在最近一次启动时花费的启动毫秒数。当 LSE(低速外部)振荡器失效且 RTC 回退到 LSI(内部 RC)时,置位 0x10000。当 RTC 在启动时被重新初始化(而不是从上一次上电继续)时,置位 0x20000。
- wakeup(timeout_ms: int | None, callback: Callable[[RTC], None] | None = None, /) None¶
调度一个周期性唤醒中断。
timeout_ms是以毫秒为单位的周期。RTC 每隔timeout_ms触发一次,并可以从machine.lightsleep()/machine.deepsleep()唤醒 MCU。传递None以禁用唤醒定时器。callback从唤醒 IRQ 中被调用;传递None则不安装回调(唤醒仍会触发并唤醒 MCU)。
仅限 mimxrt + alif¶
仅限 mimxrt¶
- cancel(alarm_id: int = 0, /) None¶
alarm_cancel()的已弃用别名,为向后兼容而保留。计划在 MicroPython 2.0 中移除。
- irq(*, trigger: int = ALARM0, handler: Callable[[RTC], None] | None = None, wake: int = 0, hard: bool = False) None¶
为 RTC 闹钟注册回调。
trigger必须是ALARM0——唯一支持的 IRQ 源。当闹钟触发时,handler会以RTC实例作为参数被调用。hard=True注册一个硬中断处理程序(回调中不进行堆分配)。wake为跨端口兼容性而被接受,但没有效果。
常量¶
- ALARM0: int¶
RTC 单个闹钟通道的标识符。传递给
alarm()、alarm_left()、alarm_cancel()和irq()的trigger参数。仅限 mimxrt 端口。