реклама на сайте
подробности

 
 
> RTC в STM32
123kill12
сообщение Oct 27 2011, 07:06
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 96
Регистрация: 12-05-10
Пользователь №: 57 217



что то не могу разобраться с RTC.

схема RTC

тактирование


у меня нет LSE поэтому буду питаться от HSE/128

вот моя иницилизация его
Код
void mcu_rtc_init(void)
{
    int rtc_value = 0x00;
        
    if ((RCC->BDCR & RCC_BDCR_RTCEN) != RCC_BDCR_RTCEN)                     //      если RTC отключен
    {
        RCC->BDCR |= RCC_BDCR_RTCSEL_0 | RCC_BDCR_RTCSEL_1;             //    выбираем внешний кварц 12MHz /128 =93750 Hz.
                
                RCC->BDCR |= RCC_BDCR_BDRST;                          //    сброс
        RCC->BDCR &= ~RCC_BDCR_BDRST;
        RCC->BDCR |= RCC_BDCR_RTCEN;                    //    разрешить работу RTC
                
        RTC->CRL |= RTC_CRL_CNF;                             //    заходим в режим конфигурации
        
        RTC->PRLH = 0;
        RTC->PRLL = 2-1;                         //    93750Hz/3=31250Hz
                                        //    1/31250Hz ->0.000032c
        RTC->ALRH = 0;                            //    0.000032c*125=0.004c=4mc
        RTC->ALRL = 125;    
        
        RTC->CNTH = rtc_value >> 16;
        RTC->CNTL = rtc_value;
        
        RTC->CRH |= RTC_CRH_ALRIE;                     //    разрешение прерывания по аларму.
        NVIC->ISER[0] |= ena_RTC_GLOBAL;                //    разрешить прерывание от RTC.
        //NVIC->ISER[1] |= ena_RTC_ALARM;                //    разрешить прерывание от alarm RTC.
        
        RTC->CRL &= ~RTC_CRL_CNF;                    //    выходим из режима конфигурации

        RTC->CRL &=~RTC_CRL_RSF;                    //    запустить синхронизацию
        while((RTC->CRL & RTC_CRL_RSF) != RTC_CRL_RSF){}            //    ожидание синхронизации
    }
}


void RTC_IRQHandler(void)
{
    count4ms++;
    if(count4ms==250)
    {
        count4ms=0;
        count1s++;
        if(count1s==86400)
        {
            count1s=0;
        }
    }
}


и он повисает тут
RTC->CRL &=~RTC_CRL_RSF; // запустить синхронизацию
while((RTC->CRL & RTC_CRL_RSF) != RTC_CRL_RSF){} // ожидание синхронизации

значит часы не запускаются(((

Сообщение отредактировал 123kill12 - Oct 27 2011, 10:16
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
123kill12
сообщение Oct 27 2011, 10:14
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 96
Регистрация: 12-05-10
Пользователь №: 57 217



а можно по подробнее?

выполнил две команды
RCC->APB1ENR |= RCC_APB1ENR_PWREN | RCC_APB1ENR_BKPEN;
PWR->CR |= PWR_CR_DBP;
затем что за ресет? сброс часов или что?
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Oct 27 2011, 10:36
Сообщение #3


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Вот рабочий кусок:
CODE
// enable APB1 clocks
RCC->APB1ENR |= RCC_APB1ENR_PWREN | RCC_APB1ENR_BKPEN;

// disable backup domain write protection
PWR->CR |= PWR_CR_DBP;

// reset Backup Domain
RCC->BDCR |= RCC_BDCR_BDRST;
RCC->BDCR &= ~RCC_BDCR_BDRST;

RCC->BDCR &= ~(RCC_BDCR_LSEON | RCC_BDCR_LSEBYP);
// enable LSE
RCC->BDCR |= RCC_BDCR_LSEON;
// wait till LSE is ready
while (!(RCC->BDCR & RCC_BDCR_LSERDY)) ;
// select LSE as RTC clock source
RCC->BDCR |= RCC_BDCR_RTCSEL_LSE;

// enable RTC clock
RCC->BDCR |= RCC_BDCR_RTCEN;

// wait for RTC registers synchronization
wait_sync();

wait_ready();

// set RTC prescaler: set RTC period to 1sec
RTC->CRL |= RTC_CRL_CNF; // enter config mode
RTC->PRLH = 0;
RTC->PRLL = 32767;
RTC->CRL &= ~RTC_CRL_CNF; // exit config mode

wait_ready();

// enable backup domain write protection
PWR->CR &= ~PWR_CR_DBP;

wait_ready();


функции wait_ready() и wait_sync():
Код
void wait_sync(void) {
    RTC->CRL &= ~RTC_CRL_RSF;
    while (!(RTC->CRL & RTC_CRL_RSF));
}

void wait_ready(void) {
    while (!(RTC->CRL & RTC_CRL_RTOFF));
}




--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 13:01
Рейтинг@Mail.ru


Страница сгенерированна за 0.01372 секунд с 7
ELECTRONIX ©2004-2016