新手入门
- 积分
- 12
- 金钱
- 12
- 注册时间
- 2019-9-3
- 在线时间
- 18 小时
|
15金钱
通过闹钟定时,每6个小时,重新初始化闹钟。发现设置时间为59s时,偶尔会导致rtc不能工作,有大佬有遇到类似的问题吗?
- u8 My_RTC_Init(u8 update,u8 YY,u8 MM,u8 DD,u8 hh,u8 mm,u8 ss,u8 week)
- {
- RTC_InitTypeDef RTC_InitStructure;
- ICSTIME_T RX8025_Date;
- RTC_TimeTypeDef RTC_TimeStruct;
- RTC_DateTypeDef RTC_DateStruct;
- u16 retry=0X1FFF;
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);//使能PWR时钟
- PWR_BackupAccessCmd(ENABLE); // 使能后备寄存器访问
- if(RTC_ReadBackupRegister(RTC_BKP_DR0)!=0x5050 || update == 1 ) //是否第一次配置,不判断flag_time的话只有在RTC丢失的时候才能配置
- {
- RCC_LSEConfig(RCC_LSE_ON);//LSE 开启
- while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET) //检查指定的RCC标志位设置与否,等待低速晶振就绪
- {
- retry++;
- delay_ms(10);
- }
- if(retry==0)return 1; //LSE 开启失败.
- RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); //设置RTC时钟(RTCCLK),选择LSE作为RTC时钟
- RCC_RTCCLKCmd(ENABLE); //使能RTC时钟
- RTC->WPR=0xCA;
- RTC->WPR=0x53;
- RTC_InitStructure.RTC_AsynchPrediv = 0x7F;//RTC异步分频系数(1~0X7F)
- RTC_InitStructure.RTC_SynchPrediv = 0xFF;//RTC同步分频系数(0~7FFF)
- RTC_InitStructure.RTC_HourFormat = RTC_HourFormat_24;//RTC设置为,24小时格式
- RTC_Init(&RTC_InitStructure);
- if( G_ENRX8025 == 1 )
- {//设置rx8025
- //获取外部时钟时间
- GetRX8025((void*)&RX8025_Date);
- //设置日期
- RTC_Set_Date(RX8025_Date.year,RX8025_Date.month,RX8025_Date.day,RX8025_Date.weekday);
- //设置时间
- RTC_Set_Time(RX8025_Date.hour,RX8025_Date.minute,RX8025_Date.second,RTC_H12_AM);
- }
- else
- {
- RTC_Set_Date(YY,MM,DD,week);
- RTC_Set_Time(hh,mm,ss,RTC_H12_AM);
- }
- RTC_WriteBackupRegister(RTC_BKP_DR0,0x5050);
- }
- //设置闹钟
- RTC_GetTime(RTC_Format_BIN,&RTC_TimeStruct);
- RTC_GetDate(RTC_Format_BIN,&RTC_DateStruct);
- week = RTC_DateStruct.RTC_WeekDay;
- hh = RTC_TimeStruct.RTC_Hours;
- mm = RTC_TimeStruct.RTC_Minutes;
- ss = RTC_TimeStruct.RTC_Seconds;
- mm++;
- if(mm==60)
- {//每时从0分开始计算
- mm=0;
- hh++;
- if(hh==24)
- {//每日从0时开始计算
- hh=0;
- week++;
- if(week==8)
- week=1;
- }
- }
- RTC_Set_AlarmA(week,hh,mm,ss);
- return 0;
- }
复制代码
|
|