Все работает.
CODE
void init_RTC(void)
{
PWR->CR |= (1 << PWR_CR_DPB);
RTC->WPR = 0xCA;
RTC->WPR = 0x53;
RCC->BDCR =
(1 << RCC_BDCR_LSEON)
| (RCC_RTC_LSE_CLOCK << RCC_BDCR_RTCSEL)
| (1 << RCC_BDCR_RTCEN);
RTC->ISR |= (1 << RTC_ISR_INIT);
con_str("\n\r{1}\n\r"); con_start();
while(~RTC->ISR & (1 << RTC_ISR_INITF));
con_str("\n\r{2}\n\r"); con_start();
RTC->PRER = (0x7F << RTC_PRER_PREDIV_A) | (0xFF << RTC_PRER_PREDIV_S);
RTC->PRER = (0x7F << RTC_PRER_PREDIV_A) | (0xFF << RTC_PRER_PREDIV_S);
RTC->TR = 0;
RTC->DR = 0;
RTC->ALRMAR = (1UL << 31) | (1 << 24) | (2 << 4);
RTC->CR = (0 << RTC_CR_FMT) | (1 << 21) | (1 << 8);
RTC->TAFCR = (1 << 18);
RTC->ISR &= ~((1 << RTC_ISR_INIT) | (1 << RTC_ISR_ALRAF));
con_str("\n\r{3}\n\r"); con_start();
while(~RTC->ISR & (1 << RTC_ISR_RSF));
con_str("\n\r{4}\n\r"); con_start();
RTC->WPR = 0xFF;
}
а перед этим
RCC->APB1ENR = 0
| (0 << RCC_APB1_TIM12)
| (1 << RCC_APB1_PWR);