| 配置简单RTC(库函数版)(注意修改头文件) 
 #include "all.h"
void delay(uint32_t num)
{
    uint32_t i;
    for(i=0;i<num;i++);
}
void rtc_work_cfg()
{
    uint32_t    scaler;
    uint32_t    cnt;
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP,ENABLE);
    PWR_BackupAccessCmd(ENABLE);  // Enable or disables access to the RTC and backup registers.
    RCC_BackupResetCmd(ENABLE);
    RCC_BackupResetCmd(DISABLE);
    RCC_RTCCLKCmd(ENABLE);        //Enable or disables the RTC clock.
    RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); //Configure the RTC clock (RTCCLK).
    RCC_LSEConfig(RCC_LSE_ON);    //Configure the External Low Speed oscillator (LSE).
    while(!(RCC->BDCR & 0x1<<1)); // //External low-speed clock ready flag.
    
    RTC_WaitForLastTask();   //Wait until last write operation on RTC registers has finished.
    RTC_EnterConfigMode();   //Enter the RTC configuration mode.
    RTC_SetPrescaler(0x80);  //Set the RTC prescaler value.
    RTC_SetCounter(0x50);    //Set the RTC counter value.
    RTC_SetAlarm(0x150);     //Set the RTC alarm value.
   
    RTC_ExitConfigMode();     //Exit from the RTC configuration mode.
    RTC_WaitForLastTask();   //Wait until last write operation on RTC registers has finished.
    RTC_WaitForSynchro();    //wait until the RTC registers (RTC_CNT, RTC_ALR and RTC_PRL) are synchronized with RTC APB clock.
    delay(8000);
//***************************************************  
    RTC_WaitForLastTask();   //Wait until last write operation on RTC registers has finished.
    RTC_EnterConfigMode();   //Enter the RTC configuration mode.
    RTC_SetCounter(0x500);   //Set the RTC counter value.
    RTC_ExitConfigMode();    //Exit from the RTC configuration mode.
    RTC_WaitForLastTask();   //Wait until last write operation on RTC registers has finished.
    RTC_WaitForSynchro();    //wait until the RTC registers (RTC_CNT, RTC_ALR and RTC_PRL) are synchronized with RTC APB clock.
//***************************************************  
    delay(8000);
    cnt = RTC_GetCounter();
    scaler = RTC_GetDivider();
    delay(100);
    printf_info("Prescaler = %x,cnt = %x\n",scaler,cnt);
}
void main()
{
    rtc_work_cfg();
}
 
 |