Bawiąc się RTC w STM32F030F4 znalazłem jego małą wadę - kilkukrotnie przeglądałem dokumentacje, żeby to potwierdzić - brakuje przerwania od wybicia pełnej sekundy :( Jest to zawsze przydatne w zegarkach, aby je ładnie odświeżać. Można uzyskać taką funkcjonalność kosztem... alarmu, który jest tylko jeden, lub przerwania EXTI od pinu wyjściowego zegara.
Poniżej schemat RTC w tym mikrokontrolerku:
Mój obecny kod do inicjalizacji zegara:
void init_RTC( void ) { // wlaczenie zegara dla PWR RCC->APB1ENR |= RCC_APB1ENR_PWREN; // wlaczenie generatora LSI RCC->CSR |= RCC_CSR_LSION; // oczekiwanie na uruchomienie while( !( RCC->CSR & RCC_CSR_LSIRDY ) ); // dostep do rejestrow RTC PWR->CR |= PWR_CR_DBP; // reset sekcji RTC RCC->BDCR |= RCC_BDCR_BDRST; RCC->BDCR &= ~RCC_BDCR_BDRST; // wybor zrodla taktowania dla rcc ( LSI ) RCC->BDCR |= RCC_BDCR_RTCSEL_1; RCC->BDCR &= ~RCC_BDCR_RTCSEL_0; // wlaczenie rtc RCC->BDCR |= RCC_BDCR_RTCEN; // odblokowanie RTC - super sprawa RTC->WPR = 0xca; RTC->WPR = 0x53; // wejscie w tryb inicjalizacji RTC->ISR |= RTC_ISR_INIT; // oczekiwanie na inicjalizacje while( !( RTC->ISR & RTC_ISR_INITF ) ); // teraz mozemy wprowadzac zmiany w rejestrach zegara RTC->ALRMASSR = 0x0f000000; // kasowanie setnych sekundy RTC->TR = 0; // ustawienia przerwania co sekunde - niestety za pomoca ustawienia alarmu // ustawiamy alarm tak, zeby nie byl zalezny praktycznie od niczego // wtedy bedzie sprawdzany i uruchamiany co sekunde RTC->ALRMAR |= RTC_ALRMAR_MSK4; RTC->ALRMAR |= RTC_ALRMAR_MSK3; RTC->ALRMAR |= RTC_ALRMAR_MSK2; RTC->ALRMAR |= RTC_ALRMAR_MSK1; // wlaczenie alarmu i przerwania RTC->CR |= RTC_CR_ALRAIE | RTC_CR_ALRAE; // wyjscie z trybu inicjalizacji RTC->ISR &= ~RTC_ISR_INIT; RTC_wlacz_przerwanie(); }Bez funkcji wpisywania do niego godziny - najpierw musiałem rozwikłać jak zdobyć ładny sygnał 1Hz.
W RM od STM32F030 masz pięknie opisane jak uruchomić 1Hz.
OdpowiedzUsuńStrona 760, A.13.8 RTC Clock Output code example
no tak - jest opisane, ale wykorzystuje to alarm o czym pisałem wyżej, czyli tracimy możliwość korzystania ze sprzętowego alarmu niestety.
OdpowiedzUsuń