class RTC -- 实时时钟

RTC 类控制 MCU 的片上实时时钟外设,该外设在复位后仍能保持挂钟时间。

在 STM32 OpenMV Cam 上,machine.RTCpyb.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

init(datetime: tuple) None

初始化 RTC。

在 mimxrt 端口(OpenMV Cam RT1062)上,datetime 是必需的,并使用 8 元组 (year, month, day, weekday, hour, minute, second, subseconds)

在 STM32 OpenMV 摄像头上,init() 不接受参数:它(重新)启动 RTC 外设,而不改动当前日期/时间。

calibration(value: int | None = None, /) int | None

获取或设置 RTC 的校准偏移量(用于补偿晶振频率误差)。

value 接受的范围和单位与硬件有关——该值直接写入 MCU 的 RTC 微调寄存器。有关确切的编码,请参阅相关的 STM32 / i.MX RT 参考手册。

仅限 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

alarm(id: int, time: int | tuple, *, repeat: bool = False) None

启动 RTC 闹钟。id 选择闹钟通道(使用 ALARM0)。time 可以是表示未来毫秒数的整数,也可以是 datetime 元组。传递 repeat=True 以在每次触发后自动重新启动(仅当 time 是毫秒计数时有效)。

在 alif 上仅支持毫秒计数形式。

仅限 mimxrt

alarm_left(alarm_id: int = 0, /) int

返回由 alarm_id 标识的闹钟触发前剩余的毫秒数。

alarm_cancel(alarm_id: int = 0, /) None

取消先前已启动的闹钟。

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 端口。