Skip to main content
Gerardo GALLUCCI
ST Employee
May 31, 2011
Question

RTC WaitForSynchro

  • May 31, 2011
  • 3 replies
  • 918 views
Posted on May 31, 2011 at 10:28

hi all,

I'm using a RTC (for the first time!). During the RTC_Configuration function, execution stops in RTC_WaitForSynchro() call.

void RTC_Configuration(void)

{

  RCC_LSICmd(ENABLE);

  while (RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET);

  RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);

  RCC_RTCCLKCmd(ENABLE);

  RTC_WaitForSynchro();///////////////////////////////////stops here!

  RTC_WaitForLastTask();

  RTC_ITConfig(RTC_IT_SEC, ENABLE);

  RTC_WaitForLastTask();

  RTC_SetPrescaler(0);

  RTC_WaitForLastTask();

}

void RCC_Configuration(void)

{                                                       

  RCC_DeInit();

  RCC_HSEConfig(RCC_HSE_ON);

  if(RCC_WaitForHSEStartUp() == SUCCESS)

  {

    FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

    FLASH_SetLatency(FLASH_Latency_2);

    RCC_HCLKConfig(RCC_SYSCLK_Div1);

    RCC_PCLK2Config(RCC_HCLK_Div1);

    RCC_PCLK1Config(RCC_HCLK_Div2);

    RCC_PLLConfig(RCC_PLLSource_HSE_Div2, RCC_PLLMul_9);

    RCC_PLLCmd(ENABLE);

    while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);

    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

    while(RCC_GetSYSCLKSource() != 0x08);

  }

}

void NVIC_Configuration(void)

{

  NVIC_InitTypeDef NVIC_InitStructure;

  NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);  

  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

  NVIC_InitStructure.NVIC_IRQChannel = RTC_IRQChannel;

  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;

  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;

  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

  NVIC_Init(&NVIC_InitStructure);

}

int main(void)

{

  NVIC_Configuration();

  RCC_Configuration();

  RTC_Configuration();

  while (1);

}

thanks all

jerry

    This topic has been closed for replies.

    3 replies

    Tesla DeLorean
    Guru
    May 31, 2011
    Posted on May 31, 2011 at 18:58

    I think you'll need the following prior to RCC_RTCCLKConfig

      /* Enable the PWR and BKP Clocks */

      RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);

      PWR_BackupAccessCmd(ENABLE);                        /* Allow access to BKP Domain */

      BKP_DeInit();                                                        /* Reset Backup Domain */

    You probably want to set up the prescaler to a more valid figure, if you don't want ''1 second'' interrupts to occur at 40KHz

    RTC_SetPrescaler(40000);

    Tips, Buy me a coffee, or three.. PayPal VenmoUp vote any posts that you find helpful, it shows what's working..
    Gerardo GALLUCCI
    ST Employee
    June 1, 2011
    Posted on June 01, 2011 at 11:41

    thanks Clive,

    yesterday I found this solution, but it's not clear for me the reason!

    I need only a RTC@20KHz (prescaler=1, so LSI/(1+1)=20KHz). Why are PWR and BKP needed???

    thank for help

    jerry

    Tesla DeLorean
    Guru
    June 1, 2011
    Posted on June 01, 2011 at 13:32

    Why are PWR and BKP needed???

     

     

    Because the way the units are powered, and protected across the reset. From the Reference Manual we have the specific cite :

    5.1 BKP introduction

    The backup registers are forty two 16-bit registers for storing 84 bytes of user application data. They are implemented in the backup domain that remains powered on by VBAT when the VDD power is switched off. They are not reset when the device wakes up from Standby mode or by a system reset or power reset.

    In addition, the BKP control registers are used to manage the Tamper detection feature and RTC calibration.

    After reset, access to the Backup registers and RTC is disabled and the Backup domain (BKP) is protected against possible parasitic write access. To enable access to the Backup registers and the RTC, proceed as follows:

    �? enable the power and backup interface clocks by setting the PWREN and BKPEN bits in the RCC_APB1ENR register

    �? set the DBP bit the Power Control Register (PWR_CR) to enable access to the Backup registers and RTC

    There may be additional references, but this one sticks, and is on point.

    Tips, Buy me a coffee, or three.. PayPal VenmoUp vote any posts that you find helpful, it shows what's working..