OpenEdv-开源电子网

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

重新初始化rtc会导致时钟不工作吗

[复制链接]

7

主题

14

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2019-9-3
在线时间
18 小时
发表于 2020-8-14 10:16:07 | 显示全部楼层 |阅读模式
15金钱
通过闹钟定时,每6个小时,重新初始化闹钟。发现设置时间为59s时,偶尔会导致rtc不能工作,有大佬有遇到类似的问题吗?
  1. u8 My_RTC_Init(u8 update,u8 YY,u8 MM,u8 DD,u8 hh,u8 mm,u8 ss,u8 week)
  2. {
  3.         RTC_InitTypeDef RTC_InitStructure;
  4.         ICSTIME_T RX8025_Date;
  5.         RTC_TimeTypeDef RTC_TimeStruct;
  6.         RTC_DateTypeDef RTC_DateStruct;
  7.         u16 retry=0X1FFF;
  8.   RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);//使能PWR时钟
  9.         PWR_BackupAccessCmd(ENABLE);        // 使能后备寄存器访问
  10.         if(RTC_ReadBackupRegister(RTC_BKP_DR0)!=0x5050 || update == 1 )                //是否第一次配置,不判断flag_time的话只有在RTC丢失的时候才能配置
  11.         {
  12.                 RCC_LSEConfig(RCC_LSE_ON);//LSE 开启   
  13.                 while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET)        //检查指定的RCC标志位设置与否,等待低速晶振就绪
  14.                 {
  15.                         retry++;
  16.                         delay_ms(10);
  17.                 }
  18.                 if(retry==0)return 1;                //LSE 开启失败.
  19.                 RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);                //设置RTC时钟(RTCCLK),选择LSE作为RTC时钟
  20.                 RCC_RTCCLKCmd(ENABLE);        //使能RTC时钟
  21.                 RTC->WPR=0xCA;
  22.                 RTC->WPR=0x53;
  23.     RTC_InitStructure.RTC_AsynchPrediv = 0x7F;//RTC异步分频系数(1~0X7F)
  24.     RTC_InitStructure.RTC_SynchPrediv  = 0xFF;//RTC同步分频系数(0~7FFF)
  25.     RTC_InitStructure.RTC_HourFormat   = RTC_HourFormat_24;//RTC设置为,24小时格式
  26.     RTC_Init(&RTC_InitStructure);
  27.                 if( G_ENRX8025 == 1 )
  28.                 {//设置rx8025
  29.                         //获取外部时钟时间
  30.                         GetRX8025((void*)&RX8025_Date);
  31.                         //设置日期
  32.                         RTC_Set_Date(RX8025_Date.year,RX8025_Date.month,RX8025_Date.day,RX8025_Date.weekday);
  33.                         //设置时间
  34.                         RTC_Set_Time(RX8025_Date.hour,RX8025_Date.minute,RX8025_Date.second,RTC_H12_AM);
  35.                 }
  36.                 else
  37.                 {
  38.                         RTC_Set_Date(YY,MM,DD,week);
  39.                         RTC_Set_Time(hh,mm,ss,RTC_H12_AM);
  40.                 }
  41.                 RTC_WriteBackupRegister(RTC_BKP_DR0,0x5050);
  42.         }
  43.         //设置闹钟
  44.         RTC_GetTime(RTC_Format_BIN,&RTC_TimeStruct);
  45.         RTC_GetDate(RTC_Format_BIN,&RTC_DateStruct);
  46.         week = RTC_DateStruct.RTC_WeekDay;
  47.         hh = RTC_TimeStruct.RTC_Hours;
  48.         mm = RTC_TimeStruct.RTC_Minutes;
  49.         ss = RTC_TimeStruct.RTC_Seconds;
  50.         mm++;       
  51.         if(mm==60)
  52.         {//每时从0分开始计算
  53.                 mm=0;
  54.                 hh++;
  55.                 if(hh==24)
  56.                 {//每日从0时开始计算
  57.                         hh=0;
  58.                         week++;
  59.                         if(week==8)
  60.                                 week=1;
  61.                 }
  62.         }
  63.         RTC_Set_AlarmA(week,hh,mm,ss);
  64.         return 0;
  65. }
复制代码


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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2020-8-15 02:05:36 | 显示全部楼层
回复

使用道具 举报

7

主题

14

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2019-9-3
在线时间
18 小时
 楼主| 发表于 2020-8-28 17:51:38 | 显示全部楼层
自顶自顶自顶
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-4-30 13:40

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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