Saturday, May 12, 2012

ARM STM32 Study Note_8/RTC


- Block Diagram:

1. RTC has two main units, one is the APB1 interface which connected to the APB1 bus driving by PCLK1; the other is the backup domain unit driver by RTCCLK(usually outside clk source).
2.In the backup domain, TR_CLK has max upto 1s period.
3. RTC_CNT could store current time value.
4. After system powered up, accessing the register in the Backup domain will be prohibited. Unless enable PWREN&BKPEN in the RCC_APB1ENR, and DBP in the PWR_CR.

-Use backup register to check if RTC time is set or not:
-Example code to config RTC

 /* Enable PWR and BKP clocks */
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);

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

  /* Reset Backup Domain */
  BKP_DeInit();

  /* Enable LSE */
  RCC_LSEConfig(RCC_LSE_ON);
 
  /* Wait till LSE is ready */
  while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET)
  {}

  /* Select LSE as RTC Clock Source */
  RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);

  /* Enable RTC Clock */
  RCC_RTCCLKCmd(ENABLE);

  /* Wait for RTC registers synchronization

  Waits until the RTC registers (RTC_CNT, RTC_ALR and RTC_PRL)
are synchronized with RTC APB clock. */
  RTC_WaitForSynchro();

  /* Wait until last write operation on RTC registers has finished */
  RTC_WaitForLastTask();

  /* Enable the RTC Second */
  RTC_ITConfig(RTC_IT_SEC, ENABLE);

  /* Wait until last write operation on RTC registers has finished */
  RTC_WaitForLastTask();
 
  /* Set RTC prescaler: set RTC period to 1sec */
   RTC_SetPrescaler(32767); /* RTC period = RTCCLK/RTC_PR = (32.768 KHz)/(32767+1) */

  /* Wait until last write operation on RTC registers has finished */
  RTC_WaitForLastTask();

-RTC FW functions:

-RTC interrupt bits

No comments:

Post a Comment