klasa RTC – zegar czasu rzeczywistego

Klasa RTC steruje wbudowanym w MCU urządzeniem peryferyjnym zegara czasu rzeczywistego, które utrzymuje czas zegarowy pomimo resetów.

Na kamerach OpenMV Cam ze STM32 machine.RTC oraz pyb.RTC odnoszą się do tego samego obiektu bazowego.

Przykładowe użycie:

import machine

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

Konstruktory

class machine.RTC(id: int = 0)

Zwraca singleton RTC. id jest akceptowane dla zgodności między portami, ale na portach obsługiwanych przez OpenMV prawidłowa jest tylko wartość 0 (każda kamera ma jeden RTC).

Poniższe metody są pogrupowane według tego, które porty OpenMV je udostępniają.

Metody dostępne na wszystkich portach OpenMV

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

Pobiera lub ustawia bieżącą datę i godzinę.

Bez argumentu zwraca bieżącą wartość jako 8-elementową krotkę (year, month, day, weekday, hour, minute, second, subseconds).

Z pojedynczym argumentem w postaci 8-elementowej krotki ustawia RTC na tę wartość.

weekday przyjmuje wartości 1 = poniedziałek do 7 = niedziela na STM32 oraz 0 = poniedziałek do 6 = niedziela na mimxrt. subseconds to ułamkowa część sekundy w jednostkach 1/256 sekundy na STM32; na mimxrt i alif zawsze wynosi 0.

tylko STM32 + mimxrt

init(datetime: tuple) None

Inicjalizuje RTC.

Na porcie mimxrt (OpenMV Cam RT1062) datetime jest wymagane i używa 8-elementowej krotki (year, month, day, weekday, hour, minute, second, subseconds).

Na kamerach OpenMV ze STM32 init() nie przyjmuje argumentu: (ponownie) uruchamia urządzenie peryferyjne RTC, pozostawiając bieżącą datę / godzinę bez zmian.

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

Pobiera lub ustawia przesunięcie kalibracyjne RTC (używane do kompensacji błędu częstotliwości kryształu).

Akceptowany zakres oraz jednostki value są specyficzne dla sprzętu – wartość jest zapisywana bezpośrednio do rejestru korekcji RTC w MCU. Dokładne kodowanie znajdziesz w odpowiednim podręczniku referencyjnym STM32 / i.MX RT.

tylko STM32

info() int

Zwraca spakowany status uruchomienia RTC jako 32-bitową liczbę całkowitą.

Niskie 16 bitów podaje liczbę milisekund, jakich RTC potrzebował na uruchomienie podczas ostatniego rozruchu. Bit 0x10000 jest ustawiony, gdy oscylator LSE (low-speed external) zawiódł i RTC powrócił do LSI (wewnętrzny RC). Bit 0x20000 jest ustawiony, gdy RTC został na nowo zainicjalizowany podczas rozruchu (zamiast kontynuować pracę z poprzedniego włączenia zasilania).

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

Planuje okresowe przerwanie wybudzające.

timeout_ms to okres w milisekundach. RTC wyzwala się co timeout_ms i może wybudzić MCU z machine.lightsleep() / machine.deepsleep(). Przekaż None, aby wyłączyć licznik wybudzania.

callback jest wywoływane z przerwania IRQ wybudzania; przekaż None, aby nie instalować żadnego wywołania zwrotnego (wybudzenie i tak nastąpi oraz wybudzi MCU).

tylko mimxrt + alif

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

Uzbraja alarm RTC. id wybiera kanał alarmu (użyj ALARM0). time to liczba całkowita milisekund w przyszłości albo krotka datetime. Przekaż repeat=True, aby automatycznie uzbroić alarm ponownie po każdym wyzwoleniu (prawidłowe tylko wtedy, gdy time jest liczbą milisekund).

Na alif obsługiwana jest tylko postać z liczbą milisekund.

tylko mimxrt

alarm_left(alarm_id: int = 0, /) int

Zwraca liczbę milisekund pozostałych do wyzwolenia alarmu zidentyfikowanego przez alarm_id.

alarm_cancel(alarm_id: int = 0, /) None

Anuluje uprzednio uzbrojony alarm.

cancel(alarm_id: int = 0, /) None

Przestarzały alias alarm_cancel(), zachowany dla zgodności wstecznej. Zaplanowany do usunięcia w MicroPython 2.0.

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

Rejestruje wywołanie zwrotne dla alarmu RTC.

trigger musi być ALARM0 – jedyne obsługiwane źródło IRQ. handler jest wywoływane z instancją RTC, gdy alarm się wyzwoli. hard=True rejestruje sprzętową procedurę obsługi przerwania (brak alokacji na stercie w wywołaniu zwrotnym). wake jest akceptowane dla zgodności między portami, ale nie ma żadnego efektu.

Stałe

ALARM0: int

Identyfikator jedynego kanału alarmu RTC. Przekaż do alarm(), alarm_left(), alarm_cancel() oraz do argumentu trigger metody irq(). Tylko port mimxrt.