OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2483|回复: 1

RTC 复位后不能启动

[复制链接]

14

主题

171

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
450
金钱
450
注册时间
2017-3-31
在线时间
118 小时
发表于 2018-1-9 11:33:44 | 显示全部楼层 |阅读模式
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();// &#212;êDí&#197;&#228;&#214;&#195; CNT ALR PRL       
                RTC_SetPrescaler(39999);
                RTC_WaitForLastTask();       
                RTC_DateTime_Set(2018,1,6,18,12,15);  //éè&#214;&#195;ê±&#188;&#228;       
                RTC_ExitConfigMode();        
               
                BKP_WriteBackupRegister(LS_BKP_DR_DATETIME_STA, 0X5AA5);
        }
        else//&#207;μí3&#188;ìD&#248;&#188;&#198;ê±
        {
                RTC_WaitForSynchro();       
                RTC_WaitForLastTask();
                RTC_ITConfig(RTC_IT_SEC, ENABLE);       
                RTC_WaitForLastTask();       
        }
        RTC_NVIC_Config();
        return 0; //&#197;&#228;&#214;&#195;&#213;y3£
}[/mw_shl_code]我尝试复位之后在配置RTC之前调用RCC_LSICmd(ENABLE)启动LSI, RTC_WaitForSynchro()可以过,但是这样计时会出错
请问是什么原因导致的RTC寄存器不能同步,又为什么重新使能LSI可以?LSI在休眠过程中不是一直运行的么?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-1-10 00:47:20 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-23 04:30

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表