1.最严重的,浪费了好几个小时
由系统复位后,对后备寄存器和RTC的访问被禁止,这是为了防止对后备区域(BKP)的意外写操
作。执行以下操作将使能对后备寄存器和RTC的访问:
这句话表明,需要进入后备区域才能访问RTC
当然这要开启时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE); 电源和后备区域
2.RTC_CNT寄存器用来存放计数器的计数值
RTC_SetCounter(2);
RTC_SetAlarm(4);
设置当前计数器的值,当计数器的值为4时,触发闹钟中断
我当时设置的计数器的值超过了闹钟值(啊啊 啊啊 愚蠢)
RSF:寄存器同步标志 (Registers synchronized flag) |
RCC_RTCCLKCmd(ENABLE);//先使能时钟
RTC_WaitForSynchro();//再判断是否同步
等待LSE (我选的时钟)和apb时钟同步,需要先使能时钟再等待同步,如果次序乱了,就死循环了
RTC_WaitForLastTask();
理论上每次写RTC寄存器都要等待先完成(我试了一些,发现有些地方可以不写也能运行)