打印
[STM32F1]

STM32的RTC时钟每次按键复位都会重新复位的问题

[复制链接]
4063|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
majtsdd|  楼主 | 2014-4-4 16:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
帖子如题所示
其实代码在下面
我每次复位之后技术都从2000开始
void InitRTCCongig(void)
{
  if(BKP_ReadBackupRegister(BKP_DR1)!=0xA5A5)
  {
    InitRTCCLKConfig();
    BKP_WriteBackupRegister(BKP_DR1,0xA5A5);
  }else
  {
    if(RCC_GetFlagStatus(RCC_FLAG_PORRST)!=RESET)
    {
        //这是上电复位
    }else if(RCC_GetFlagStatus(RCC_FLAG_PINRST)!=RESET)
    {
        //这是按键复位
    }
    RCC_ClearFlag();
    RTC_WaitForLastTask();
   
    //RCC_RTCCLKCmd(ENABLE);
    RTC_WaitForSynchro();
    RTC_WaitForLastTask();
   
    RTC_ITConfig(RTC_IT_SEC,ENABLE);
    RTC_WaitForLastTask();
  }
#ifndef RTCClockOutput_Enbale
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP|RCC_APB1Periph_PWR,ENABLE);
  PWR_BackupAccessCmd(ENABLE);
  BKP_TamperPinCmd(DISABLE);
  BKP_RTCOutputConfig(BKP_RTCOutputSource_CalibClock);
#endif
  
  InitRTCNVICConfig();
}
下面是InitRTCCLKConfig()的代码
static void InitRTCCLKConfig(void)
{
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP|RCC_APB1Periph_PWR,ENABLE);
  PWR_BackupAccessCmd(ENABLE);
  BKP_DeInit();
  RCC_LSEConfig(RCC_LSE_ON);
  while(RCC_GetFlagStatus(RCC_FLAG_LSERDY)==RESET);
  RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);
  RCC_RTCCLKCmd(ENABLE);
  RTC_WaitForSynchro();
  RTC_WaitForLastTask();
  RTC_SetCounter(2000);
  RTC_WaitForLastTask();
  RTC_ITConfig(RTC_IT_SEC,ENABLE);
  RTC_WaitForLastTask();
  RTC_SetPrescaler(32767);
  RTC_WaitForLastTask();
  PWR_BackupAccessCmd(DISABLE);
}
沙发
majtsdd|  楼主 | 2014-4-15 11:44 | 只看该作者
看来是没人回答了

使用特权

评论回复
板凳
ticomi| | 2014-4-16 08:06 | 只看该作者
我之前也遇到这个问题,是没有查看RTC中的寄存器值是否已经配置,如果没配置则初始化否则不需要初始化!

使用特权

评论回复
地板
majtsdd|  楼主 | 2014-4-16 08:33 | 只看该作者
先试试吧

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

26

帖子

0

粉丝