搜索
bottom↓
回复: 16

STM32F407 RTC奇怪现象

[复制链接]

出0入0汤圆

发表于 2016-7-28 20:46:28 | 显示全部楼层 |阅读模式
本帖最后由 jeasey 于 2016-7-28 20:50 编辑

最近使用STM32F407的RTC,配置如下:

void bsp_InitRTC(void)
{
        RTC_InitTypeDef RTC_InitStructure;

  RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);
  PWR_BackupAccessCmd(ENABLE);//ÔÊÐí·ÃÎÊRTC
  
#if defined (RTC_CLOCK_SOURCE_LSI)         
  RCC_LSICmd(ENABLE);
        while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET);
        RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);
        RCC_RTCCLKCmd(ENABLE);
        RTC_WaitForSynchro();
#endif  

#if defined (RTC_CLOCK_SOURCE_LSE)         
  RCC_LSEConfig(RCC_LSE_ON);
        while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET);
        RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);               
       
        RCC_RTCCLKCmd(ENABLE);
        RTC_WaitForSynchro();
       
  RTC_InitStructure.RTC_AsynchPrediv = 0x7F;
  RTC_InitStructure.RTC_SynchPrediv = 0xFF;
  RTC_InitStructure.RTC_HourFormat = RTC_HourFormat_24;
        RTC_Init(&RTC_InitStructure);       
#endif  

  if(RTC_ReadBackupRegister(RTC_BKP_DR0) != 0x32F2)   
  {
   
    RTC_WriteProtectionCmd(DISABLE);
  
    RTC_EnterInitMode();
  
    RTC_TimeStructure.RTC_Seconds = 0;
    RTC_TimeStructure.RTC_Minutes = 0;
    RTC_TimeStructure.RTC_Hours = 0;
    RTC_TimeStructure.RTC_H12 = RTC_H12_AM;
    RTC_SetTime(RTC_Format_BIN,&RTC_TimeStructure);
  
    RTC_DateStructure.RTC_Date = 1;
    RTC_DateStructure.RTC_Month = 1;
    RTC_DateStructure.RTC_WeekDay= RTC_Weekday_Thursday;
    RTC_DateStructure.RTC_Year = 10;
    RTC_SetDate(RTC_Format_BIN,&RTC_DateStructure);
  
    RTC_ExitInitMode();
    RTC_WriteBackupRegister(RTC_BKP_DR0,0x32F2);
    RTC_WriteProtectionCmd(ENABLE);
    RTC_WriteBackupRegister(RTC_BKP_DR0,0x32F2);  
  }
  PWR_BackupAccessCmd(DISABLE);
}          

每秒输出一下时钟:
void RTC_DateTimeShow(void)
{

        RTC_GetDate(RTC_Format_BIN, &RTC_DateStructure);

        printf("20%0.2d-%0.2d-%0.2d  ",        RTC_DateStructure.RTC_Year,
                                                                                                                                                        RTC_DateStructure.RTC_Month,
                                                                                                                                                        RTC_DateStructure.RTC_Date,
                                                                                                                                                        RTC_DateStructure.RTC_WeekDay);
       

        RTC_GetTime(RTC_Format_BIN, &RTC_TimeStructure);

        printf("%0.2d:%0.2d:%0.2d\r\n",        RTC_TimeStructure.RTC_Hours,
                                                                                                                                                        RTC_TimeStructure.RTC_Minutes,
                                                                                                                                                        RTC_TimeStructure.RTC_Seconds);       
}

输出的时间在夸天时怎么是这样呢???

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

 楼主| 发表于 2016-7-28 20:52:07 | 显示全部楼层
好像大家没出现这样的问题。

why?????

出0入0汤圆

发表于 2016-7-28 21:04:59 | 显示全部楼层
你觉得应该输出什么?

出0入0汤圆

 楼主| 发表于 2016-7-28 21:16:05 | 显示全部楼层
本帖最后由 jeasey 于 2016-7-28 21:17 编辑

2016-07-28 23:59:59
下一秒应该是
2016-07-29 00:00:00

但是输出是
2016-07-28 00:00:00

出0入0汤圆

 楼主| 发表于 2016-7-28 21:16:38 | 显示全部楼层
elec2000 发表于 2016-7-28 21:04
你觉得应该输出什么?

2016-07-28 23:59:59
下一秒应该是
2016-07-29 00:00:00

出0入0汤圆

发表于 2016-7-28 21:26:45 | 显示全部楼层
你拿日期的时候还在前一天,拿时间的时候就变隔天了。

出0入0汤圆

 楼主| 发表于 2016-7-28 21:49:47 | 显示全部楼层
wistarky 发表于 2016-7-28 21:26
你拿日期的时候还在前一天,拿时间的时候就变隔天了。

呵呵,谢谢,确实是这样的。

谢谢!!!

出0入0汤圆

发表于 2016-7-29 07:02:23 来自手机 | 显示全部楼层
必须先读time

出0入0汤圆

发表于 2016-7-30 01:44:57 | 显示全部楼层
先拿Time再拿Date也不一定就对,最好是同时拿Date跟Time。不过好像没有这个功能。

出0入0汤圆

发表于 2016-7-30 03:05:58 | 显示全部楼层
多简单一事儿,读一次Date,读一次Time,再读一次Date。两次Date一样就OK,不一样就重来一遍。

出0入0汤圆

发表于 2016-7-30 09:29:13 来自手机 | 显示全部楼层
也赞成先读time再date

出0入31汤圆

发表于 2016-7-30 10:02:21 来自手机 | 显示全部楼层
不是有影子寄存器的么?记得读时间的时候日期会锁住

出0入0汤圆

发表于 2016-7-30 10:32:23 来自手机 | 显示全部楼层
DRS 发表于 2016-7-30 09:29
也赞成先读time再date

临界也会出问题,变成新一天的23时59分59秒。楼上A+B+A的读法靠谱

出0入0汤圆

发表于 2016-7-30 21:35:56 | 显示全部楼层
这个问题确实挺蛋疼,曾经坑死我了.按照手册上的方法先读time,再读date也一样的效果。感觉那个影子寄存器不起作用一样.不知道其他人是怎么解决的

出0入0汤圆

发表于 2016-7-30 21:37:30 | 显示全部楼层
我用的stm32L476ZG

出0入0汤圆

发表于 2020-7-1 21:33:14 | 显示全部楼层
Scarlette 发表于 2016-7-30 03:05
多简单一事儿,读一次Date,读一次Time,再读一次Date。两次Date一样就OK,不一样就重来一遍。 ...

赞赞,好方法!!

出0入21汤圆

发表于 2020-7-1 21:38:09 | 显示全部楼层
我每次读秒,再判断一下,如果秒是00,就把所有时间全部读一下.
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-26 11:30

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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