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ń