Пробую запустить RTC на плате STM32 VL Discovery, нашел пример в сети инициализирую, обработчик прерывания есть, в котором светодиод должен загораться и гаснуть раз в секунду. На самом же деле реакции никакой, кто знает, что за напасть?
Код: Выделить всё
/*======================*\
| Подключаем в код содержимое файлов |
\*======================*/
#include "stm32f10x.h" //*!< Файл описания периферии (главный модуль CMSIS)
void initRTC(void)
{
RCC->APB1ENR |= RCC_APB1ENR_PWREN | RCC_APB1ENR_BKPEN;
PWR->CR |= PWR_CR_DBP;
RCC->BDCR |= RCC_BDCR_LSEON;
while( (RCC->BDCR & RCC_BDCR_LSERDY) == 0 ) ; // Wait for LSERDY = 1 (LSE is ready)
RCC->BDCR |= RCC_BDCR_RTCEN | RCC_BDCR_RTCSEL_0;
while( (RTC->CRL & RTC_CRL_RTOFF) == 0 ) ; // Poll RTOFF, wait until its value goes to ‘1’
RTC->CRL |= RTC_CRL_CNF;
RTC->PRLH = 0;
RTC->PRLL = 0x7FFF;
/* Use this if you want reinit RTC */
/*
*RTC->CNTH = 0;
*RTC->CNTL = 1;
*RTC->ALRH = 0;
*RTC->ALRL = 0;
*/
RTC->CRH = RTC_CRH_SECIE;
RTC->CRL &= ~RTC_CRL_CNF;
while( (RTC->CRL & RTC_CRL_RTOFF) == 0 ) ; // Poll RTOFF, wait until its value goes to ‘1’ to check the end of the write operation.
PWR->CR &= ~PWR_CR_DBP;
/* NVIC_SetPriority & NVIC_EnableIRQ defined in core_cm3.h */
NVIC_SetPriority (RTC_IRQn, (1<<__NVIC_PRIO_BITS) - 1);
NVIC_EnableIRQ (RTC_IRQn);
}
void RTC_IRQHandler(void)
{
if(RTC->CNTL & 1)
GPIOC->BSRR = GPIO_BSRR_BS8;
else
GPIOC->BSRR = GPIO_BSRR_BR8;
RTC->CRL &= ~0x0F;
}
int main(void) /*------------ Основная программа -----------------------------*/
{
GPIOC->CRH &= ~(GPIO_CRH_MODE8|GPIO_CRH_CNF8);
GPIOC->CRH |= GPIO_CRH_MODE8_0;
initRTC();
while (1) /*----------------- Основной цикл --------------------------------*/
{};
}
//========================
// Конец файла
//========================На всякий случай свой код исправил, он рабочий.


