打印
[STM32F2]

stm32f205 的rtc使用内部的RC振荡源,却发现掉电后不走。VBAT接有3V锂电池。

[复制链接]
6169|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
MOn51|  楼主 | 2014-5-26 13:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
stm32f205 的rtc使用内部的RC振荡源,却发现掉电后不走。VBAT接有3V锂电池。
沙发
香水城| | 2014-5-26 14:34 | 只看该作者
什么叫做“掉电后不走”?是说再次上电后,看到RTC中的日历日期没有更新?

使用特权

评论回复
板凳
mmuuss586| | 2014-5-26 19:07 | 只看该作者
参考谁的程序啊?

使用特权

评论回复
地板
MOn51|  楼主 | 2014-5-26 21:06 | 只看该作者
香水城 发表于 2014-5-26 14:34
什么叫做“掉电后不走”?是说再次上电后,看到RTC中的日历日期没有更新? ...

掉电不走是:停电前是:17:38:14      过了10分钟再上电,时间还是:17:38:14 接着走。借用RTC的寄存器组,存放了一个初次上电标记。不会上电清除原来的时间。同样的程序在F207上好用。现在用在F205上,很奇怪。

使用特权

评论回复
5
MOn51|  楼主 | 2014-5-26 21:07 | 只看该作者
MCU的型号是:STM32F205RGT6

使用特权

评论回复
6
MOn51|  楼主 | 2014-5-26 21:08 | 只看该作者
程序是自己写的,早期用在STM32L152上面,很好:
//****************************************************************************************
//时钟初始化
void RTC_Config(void){
  RTC_InitTypeDef RTC_InitStructure;
        RTC_TIMER t;
       
  /* Enable the PWR clock */
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
  /* Allow access to RTC */
  PWR_BackupAccessCmd(ENABLE);
  /* Reset RTC Domain */
// RCC_BackupResetCmd(ENABLE);
        //RCC_BackupResetCmd(DISABLE);
  /* Enable the LSE OSC */
  /* Allow access to RTC */
  //PWR_RTCAccessCmd(ENABLE);
        /* Reset RTC Domain */
//        RCC_RTCResetCmd(ENABLE);
//        RCC_RTCResetCmd(DISABLE);
         /* Wait for RTC APB registers synchronisation */
  RTC_WaitForSynchro();
        if(RTC_ID ==RTC_ReadBackupRegister(RTC_BKP_DR0)) return ;///RTC_WaitForSynchro();
        //        RTC_AlarmConfig();
        //**************************************************************
  //RCC_RTCResetCmd(ENABLE);
        //RTC_WriteProtectionCmd(DISABLE);
  //RTC_EnterInitMode();       
        //RTC_DeInit();
        /* LSI used as RTC source clock */
/* The RTC Clock may varies due to LSI frequency dispersion. */   
        if (LSI_EN){
                /* Enable the LSI OSC */
                RCC_LSICmd(ENABLE);
                /* Wait till LSI is ready */  
                while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET);
                /* Select the RTC Clock Source */
                RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);
  }else{
                /* Enable the LSE OSC */
                //RTC_AlarmConfig();
                RCC_LSEConfig(RCC_LSE_ON);
                /* Wait till LSE is ready */  
                while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET);
                /* Select the RTC Clock Source */
                RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);//RCC_RTCCLKSource_HSE_Div16
        }
        /* Wait for RTC APB registers synchronisation */
  RTC_WaitForSynchro();
        //RCC_RTCCLKConfig(RCC_RTCCLKSource_HSE_Div16);
        /* Enable the RTC Clock */
  RCC_RTCCLKCmd(ENABLE);

        /* Configure the RTC data register and RTC prescaler */
  RTC_InitStructure.RTC_AsynchPrediv = 0x7F;
  RTC_InitStructure.RTC_SynchPrediv  = 0xFF;
  RTC_InitStructure.RTC_HourFormat   = RTC_HourFormat_24;
  RTC_Init(&RTC_InitStructure);
        //****************************************************************
  /* Set the time to 00h 00mn 00s AM */
  t.Hour           = 8;
  t.Min                 = 0;
  t.Sec                 = 1;  
        //******************************************************
        //日期设定!
        t.Mon                        =5;
        t.Day                        =1;
        t.Year                =14;
        t.Week                =GetWeek (t.Year ,t.Mon,t.Day );
                //*******************************************************
        RTC_WrTimer(t);
        //*******************************************************
        RTC_WriteBackupRegister(RTC_BKP_DR0, RTC_ID);//放入标志位!
  /* Enable the RTC Clock */
  //RCC_RTCCLKCmd(ENABLE);
   /* Wait for RTC APB registers synchronisation */
  RTC_WaitForSynchro();
        //**********************************************************
        //RTC_ExitInitMode();
  //RTC_WriteProtectionCmd(ENABLE);
}

使用特权

评论回复
7
MOn51|  楼主 | 2014-5-26 21:10 | 只看该作者
STM32L15X的rtc控制复杂些,关掉了许多函数。才能在F20X上使用。

使用特权

评论回复
8
zzsir| | 2014-5-28 15:52 | 只看该作者
我也正在研究STM32F2的RTC,好像外部备用电源只给LSE和特定的备份域供电,楼主使用内部RC(即LSI)掉电后时间停止应该是正常的

使用特权

评论回复
9
threetigher| | 2016-10-19 14:44 | 只看该作者
zzsir 发表于 2014-5-28 15:52
我也正在研究STM32F2的RTC,好像外部备用电源只给LSE和特定的备份域供电,楼主使用内部RC(即LSI)掉电后时 ...

如果正常,那么RTC还有何意义呢?肯定是不正常的,哪里出了问题。

使用特权

评论回复
10
wjss| | 2017-1-25 20:05 | 只看该作者
这个问题有点Low,没有时钟源了,你叫RTC怎么再走下去啊?肯定要接 32.768KHz的时钟才行啊!

使用特权

评论回复
11
mcuisp| | 2017-1-27 09:06 | 只看该作者
好像有个低速rc时钟是在rtc域

使用特权

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

本版积分规则

121

主题

472

帖子

7

粉丝