Obsługa RTC w STM32

 

Projektując urządzenia elektroniczne często wymagane jest odmierzanie czasu. Do tego celu wygodnie jest zastosować mikrokontroler. Do niedawna odmierzanie czasu można było zrealizować programowo w mikrokontrolerze lub konieczne było zastosowanie zewnętrznego dodatkowego układu scalonego. Obecnie nowoczesne mikrokontrolery mają wbudowane w swoją strukturę układ zegara czasu rzeczywistego (RTC – Real-Time Clock), dzięki czemu koszt wyprodukowania urządzeń może być niższy, a sama produkcja stała się łatwiejsza ze względu na mniejszą liczbę elementów do montażu oraz mniejsze wymiary płytek drukowanych. W prezentowanym projekcie przedstawiono wykorzystanie układu RTC wbudowanego w mikrokontroler STM32F103. Dla wygody przeprowadzenia wykorzystano zestaw uruchomieniowy ZL27ARM oraz moduł wyświetlacza KAmodLCD1.

Opis i obsługa programu

Prezentowany program realizuje funkcję zegarka z zaimplementowanym budzikiem. Aktualna godzina oraz stan zegarka jest wyświetlany na zewnętrznym module wyświetlacza LCD (KAmodLCD1). Dodatkowo wykorzystano również diody LED znajdujące się na płytce ewaluacyjnej ZL27ARM (w związku z czym zwora LEDs powinna być w pozycji ON) oraz przetwornik piezoceramiczny. Do sterowania funkcjami zegarka jest wykorzystywany 5-pozycyjny joystick. Podłączenie modułu wyświetlacza LCD KAmodLCD1 oraz generatora przedstawiono na rysunku 1.

 

 

Rys. 1. Sposób dołączenia wyświetlacza KAmodLCD1 oraz generatora piezoceramicznego do mikrokontrolera STM32

Rys. 1. Sposób dołączenia wyświetlacza KAmodLCD1 oraz generatora piezoceramicznego do mikrokontrolera STM32

 

 

Po włączeniu zasilania (lub wyzerowaniu mikrokontrolera) program ustawia zegar oraz alarm na 12h 00m 00s. Dodatkowo domyślnie alarm jest wyłączany. Aby wejść do konfiguracji zegarka, należy wcisnąć ENTER (wciśnięcie joysticka, zaświeci się dioda LED numer 2). Konfiguracja odbywa się poprzez przechodzenie przy użyciu joysticka (lewo/prawo) do poszczególnych elementów ustawianego czasu zegarka (dziesiątki godziny, jedności godziny, dziesiątki minut, jedności minut, dziesiątki sekund, jedności sekund), czasu alarmu (analogicznie jak dla ustawień czasu) oraz włączenia/wyłączenia alarmu. Aktualnie zmieniany element jest zaznaczony poprzez wyróżnienie go (wyświetlenie w inwersji). Ustawianie czasu zegara oraz czasu alarmu zostało tak opracowane, aby zabezpieczyć te wartości przed wprowadzeniem nieprawidłowych danych. Podczas konfiguracji aktualny czas zegara RTC jest kopiowany i edytowany, tak więc proces odliczania czasu nie będzie miał wpływu na dokładność odmierzania czasu. Zmiana wyróżnionej wartości jest dokonywana poprzez wciśnięcie przycisku UP joysticka (inkrementacja) oraz DOWN joysticka (dekrementacja). Zapis i zakończenie konfiguracji jest realizowany poprzez ponowne wciśnięcie przycisku ENTER joysticka. Na rysunku 2 przedstawiono zdjęcie wyświetlacza z zaznaczonym aktualnie edytowanym elementem.

 

 

Rys. 2. Widok wyświetlacza LCD (zmieniana wartość pola AlarmState jest wyróżniona wyświetlaniem w inwersji)

Rys. 2. Widok wyświetlacza LCD (zmieniana wartość pola AlarmState jest wyróżniona wyświetlaniem w inwersji)

 

 

W przypadku zgodności aktualnego czasu zegara oraz czasu alarmu nastąpi włączenie alarmu (tylko w przypadku, gdy AlarmState ma wartość ON). Objawia się to zaświeceniem diod LED (od 2 do 8) oraz uruchomieniem generatora akustycznego.

Program mikrokontrolera

Na listingu 1 przedstawiono okrojoną wersję programu głównego. Na początku programu jest realizowana inicjalizacja wykorzystywanych układów peryferyjnych mikrokontrolera.

 

List. 1

W prezentowanym zegarku najważniejsze znaczenie ma funkcja inicjalizująca układ RTC oraz funkcja obsługi przerwań. Funkcję inicjalizująca układ RTC przedstawiono na listingu 2.

Do pobrania

O autorze