中级会员
 
- 积分
- 450
- 金钱
- 450
- 注册时间
- 2017-3-31
- 在线时间
- 118 小时
|
1金钱
使用的是stm32f103c8ub的片子,参考原子哥的程序,使用LSI做时钟源,初始化RTC。
初次配置没问题,就是唤醒复位后重新进入RTC配置程序,会死在RTC_WaitForSynchro()处
[mw_shl_code=applescript,true]uint8_t RTC_DateTime_Config(void)
{
uint8_t temp=0;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
PWR_BackupAccessCmd(ENABLE);
RCC_LSICmd(ENABLE);
if (BKP_ReadBackupRegister(LS_BKP_DR_DATETIME_STA) != 0x5AA5)
{
RCC_LSICmd(ENABLE);
while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET&&temp<50)
{
temp++;
delay1us(100);
}
if(temp>=50)
return 1;
else
{
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);//40kHz
}
RCC_RTCCLKCmd(ENABLE);
RTC_WaitForSynchro();
RTC_WaitForLastTask();
RTC_ITConfig(RTC_IT_SEC, ENABLE);
RTC_WaitForLastTask();
RTC_EnterConfigMode();// ÔêDíÅäÖà CNT ALR PRL
RTC_SetPrescaler(39999);
RTC_WaitForLastTask();
RTC_DateTime_Set(2018,1,6,18,12,15); //éèÖÃê±¼ä
RTC_ExitConfigMode();
BKP_WriteBackupRegister(LS_BKP_DR_DATETIME_STA, 0X5AA5);
}
else//Ïμí3¼ìDø¼Æê±
{
RTC_WaitForSynchro();
RTC_WaitForLastTask();
RTC_ITConfig(RTC_IT_SEC, ENABLE);
RTC_WaitForLastTask();
}
RTC_NVIC_Config();
return 0; //ÅäÖÃÕy3£
}[/mw_shl_code]我尝试复位之后在配置RTC之前调用RCC_LSICmd(ENABLE)启动LSI, RTC_WaitForSynchro()可以过,但是这样计时会出错
请问是什么原因导致的RTC寄存器不能同步,又为什么重新使能LSI可以?LSI在休眠过程中不是一直运行的么?
|
|