class RTC -- đồng hồ thời gian thực

Lớp RTC điều khiển ngoại vi đồng hồ thời gian thực tích hợp trên MCU, duy trì thời gian thực qua các lần reset.

Trên STM32 OpenMV Cams, machine.RTCpyb.RTC tham chiếu đến cùng một đối tượng bên dưới.

Ví dụ sử dụng:

import machine

rtc = machine.RTC()
rtc.datetime((2026, 1, 21, 2, 10, 32, 36, 0))
print(rtc.datetime())

Hàm khởi tạo

class machine.RTC(id: int = 0)

Trả về singleton RTC. id được chấp nhận để tương thích giữa các cổng nhưng chỉ 0 là hợp lệ trên các cổng được OpenMV hỗ trợ (mỗi cam có một RTC).

Các phương thức bên dưới được nhóm theo cổng OpenMV nào cung cấp chúng.

Các phương thức có sẵn trên tất cả các cổng OpenMV

datetime(datetimetuple: tuple | None = None, /) tuple | None

Lấy hoặc đặt ngày và giờ hiện tại.

Không có đối số, trả về giá trị hiện tại dưới dạng tuple 8 phần tử (year, month, day, weekday, hour, minute, second, subseconds).

Với một đối số tuple 8 phần tử, đặt RTC về giá trị đó.

weekday là 1 = Thứ Hai đến 7 = Chủ Nhật trên STM32, và 0 = Thứ Hai đến 6 = Chủ Nhật trên mimxrt. subseconds là phần thập phân của giây theo đơn vị 1/256 giây trên STM32; trên mimxrt và alif nó luôn là 0.

Chỉ STM32 + mimxrt

init(datetime: tuple) None

Khởi tạo RTC.

Trên cổng mimxrt (OpenMV Cam RT1062), datetime là bắt buộc và sử dụng tuple 8 phần tử (year, month, day, weekday, hour, minute, second, subseconds).

Trên STM32 OpenMV cams, init() không nhận đối số: nó (tái) khởi động ngoại vi RTC, giữ nguyên ngày / giờ hiện tại.

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

Lấy hoặc đặt độ lệch hiệu chỉnh của RTC (dùng để bù sai số tần số thạch anh).

Phạm vi chấp nhận và đơn vị của value phụ thuộc vào phần cứng -- giá trị được ghi trực tiếp vào thanh ghi điều chỉnh RTC của MCU. Xem tài liệu tham khảo STM32 / i.MX RT liên quan để biết mã hóa chính xác.

Chỉ STM32

info() int

Trả về trạng thái khởi động RTC đóng gói dưới dạng số nguyên 32-bit.

16 bit thấp cho biết số mili giây RTC cần để khởi động tại lần boot gần nhất. Bit 0x10000 được đặt khi bộ dao động LSE (ngoại tốc độ thấp) bị lỗi và RTC quay lại LSI (RC nội bộ). Bit 0x20000 được đặt khi RTC được khởi tạo mới tại boot (thay vì tiếp tục từ lần bật nguồn trước).

wakeup(timeout_ms: int | None, callback: Callable[[RTC], None] | None = None, /) None

Lên lịch ngắt đánh thức định kỳ.

timeout_ms là chu kỳ tính bằng mili giây. RTC kích hoạt mỗi timeout_ms và có thể đánh thức MCU từ machine.lightsleep() / machine.deepsleep(). Truyền None để tắt bộ định thời đánh thức.

callback được gọi từ IRQ đánh thức; truyền None để không cài đặt hàm gọi lại (đánh thức vẫn sẽ kích hoạt và đánh thức MCU).

Chỉ mimxrt + alif

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

Đặt chuông báo RTC. id chọn kênh chuông báo (dùng ALARM0). time là số nguyên mili giây trong tương lai, hoặc một tuple datetime. Truyền repeat=True để tự động đặt lại sau mỗi lần kích hoạt (chỉ hợp lệ khi time là số mili giây).

Trên alif, chỉ hỗ trợ dạng số mili giây.

Chỉ mimxrt

alarm_left(alarm_id: int = 0, /) int

Trả về số mili giây còn lại trước khi chuông báo được xác định bởi alarm_id kích hoạt.

alarm_cancel(alarm_id: int = 0, /) None

Hủy chuông báo đã được đặt trước đó.

cancel(alarm_id: int = 0, /) None

Bí danh không còn được khuyến nghị cho alarm_cancel(), được giữ lại để tương thích ngược. Dự kiến xóa trong MicroPython 2.0.

irq(*, trigger: int = ALARM0, handler: Callable[[RTC], None] | None = None, wake: int = 0, hard: bool = False) None

Đăng ký hàm gọi lại cho chuông báo RTC.

trigger phải là ALARM0 -- nguồn IRQ duy nhất được hỗ trợ. handler được gọi với đối tượng RTC khi chuông báo kích hoạt. hard=True đăng ký hàm xử lý ngắt cứng (không cấp phát heap trong hàm gọi lại). wake được chấp nhận để tương thích giữa các cổng nhưng không có tác dụng.

Hằng số

ALARM0: int

Định danh cho kênh chuông báo duy nhất của RTC. Truyền vào alarm(), alarm_left(), alarm_cancel() và đối số trigger của irq(). Chỉ dành cho cổng mimxrt.