关于STM32 RTC的使用

直接上代码,很爽。

1、RTC的首次初始化问题

使能时钟:RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);

void RTC_Configuration(void)
{

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


  /* 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 */
  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();
}

2、设置时间

       PWR_BackupAccessCmd(ENABLE); //必须有该行,否则写不进去

RTC_WaitForLastTask();
        RTC_SetCounter(1356998400);//2013年1月1号0时0分0秒  
        BKP_WriteBackupRegister(BKP_DR1, 0xA5A5);//时间更新标志,下次开机读取该值,如果已经设置,则不需要设置时间

3、第二次开机RTC操作

    if (BKP_ReadBackupRegister(BKP_DR1) != 0xA5A5){
        /* Backup data register value is not correct or not yet programmed (when
           the first time the program is executed) */
        /* RTC Configuration */
        RTC_Configuration();

PWR_BackupAccessCmd(ENABLE); 
        RTC_WaitForLastTask(); 

 RTC_SetCounter(1356998400);//2013年1月1号0时0分0秒1356969600UL  

        BKP_WriteBackupRegister(BKP_DR1, 0xA5A5);//时间更新标志
    }

4、读取时间

UNIXTime=RTC_GetCounter();

 

你可能感兴趣的:(stm32)