关于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();

上一篇:react router @4 和 vue路由 详解(二)react-router @4用法


下一篇:POJ - 1741 Tree