Obsługa RTC w STM32

 

List. 2

Funkcja Configuration_RTC przedstawia klasyczną inicjalizację zegara czasu rzeczywistego przy wykorzystaniu biblioteki dostarczonej przez firmę STMicroelectronics – STM32F10x_StdPeriph_Lib_V3.3.0. Dodatkowo funkcją void RTC_SetCounter(uint32_t CounterValue) są wprowadzane dane do licznika odpowiadającego za przechowywanie wartości odmierzanego czasu. Natomiast za pomocą funkcji void RTC_SetAlarm(uint32_t AlarmValue) są wprowadzane dane porównywane z licznikiem w celu wywołania alarmu. Wprowadzenie czasu alarmu jest realizowane, analogicznie do zmiany wartości licznika RTC. Operacja ta jest musi być poprzedzona wyczyszczeniem flagi SECF rejestru RTC->CRL.
W działaniu zegarka są wykorzystywane przerwania. W związku z tym należy je odpowiednio skonfigurować i zaimplementować funkcje obsługi przerwań. Na listingu 3 pokazano skróconą funkcję (o mniej istotne elementy) konfigurującą system przerwań.

 

List. 3

W programie są wykorzystywane dwa przerwania pochodzące od RTC. Pierwsze z nich to RTC_IT_SEC wywoływane przy każdej inkrementacji licznika RTC (w zależności od konfiguracji odpowiada to cyklicznemu wywołaniu co 1 sekundę). Drugie wykorzystywane przerwanie (RTC_IT_ALR) jest wywoływane, gdy następuje zgodność licznika z rejestrem przechowującym wartość do porównania, przerwanie określane jest jako alarm.
Konfiguracja przerwania RTC_IT_SEC polega na określeniu priorytetu i włączeniu obsługi przy wykorzystaniu funkcji z określonymi parametrami RTC_ITConfig(RTC_IT_SEC, ENABLE). W przypadku ustawień przerwania RTC_IT_ALR poza elementami analogicznymi do przerwania wywoływanego zmianą zawartości licznika RTC do poprawnej pracy należy dodatkowo skonfigurować linie przerwania. W dokumentacji Reference manual RM0008 można znaleźć informację, że zdarzenie alarmu RTC jest dołączone do linii 17 EXTI, tak więc musimy dokonać konfiguracji tego elementu. W funkcji jest to realizowane warunkowo w zależności od wartości zmiennej alarm_state (zmienna informująca czy  alarm jest włączony – 1, czy może jest wyłączony – 0).
W programie są obsługiwane przerwania pochodzące od różnych układów peryferyjnych. Są to przerwania wywoływane zmianą położenia joysticka, przerwania pochodzące od RTC (inkrementacja licznika oraz alarm) oraz przerwanie SysTick.
W przypadku obsługi przerwania od zmiany położenia joysticka, funkcja obsługi przerwania ma za zadanie zmienić aktualnie edytowany element oraz odpowiednio inkrementować lub dekrementować jego wartość – są to operacje typowo „matematyczne”.
Przerwanie SysTick wykorzystano do generowania dźwięku. Podyktowane to było tym, iż generowany sygnał nie musi być zbyt skomplikowany, a jedynie „drażniący”, by wymusić zauważenie włączenie alarmu. Operacje realizowane w przerwaniu przedstawiono na listingu 4. Można zauważyć, że jest to tylko przełączanie sygnału wyprowadzonego na przetwornik piezoceramiczny z odpowiednią częstotliwością (ustawioną w konfiguracji przerwania SysTick) realizowane warunkowo, gdy  nastąpi włączenie się alarmu.

Do pobrania

O autorze