打印
[STM32F0]

F0C8T6 RTC时间,时,分,秒可以正常累加,但是day不累加

[复制链接]
1012|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hxb20122012|  楼主 | 2018-6-12 10:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 hxb20122012 于 2018-6-12 10:56 编辑

u8 RTC_Set(u16 syear,u8 smon,u8 sday,u8 hour,u8 min,u8 sec)
{
  //RTC_InitTypeDef RTC_InitStructure;
  RTC_DateTimeTypeDef RTC_DateTimeStructure;

if(syear<1970||syear>2099)return 1;


  RTC_DateTimeStructure.Year = (uint8_t)(syear-2000);
    RTC_DateTimeStructure.Month = smon;
    RTC_DateTimeStructure.Date = sday;
    RTC_DateTimeStructure.Week = 3;
    RTC_DateTimeStructure.Hour = hour;
    RTC_DateTimeStructure.Minute = min;
    RTC_DateTimeStructure.Second = sec;
  
    RTC_SetDateTime(RTC_DateTimeStructure);      //Ê״γõʼ»¯RTC(2016Äê6ÔÂ5ÈÕ ÖÜÆß 12:00:00)
    RTC_WriteBackupRegister(RTC_BKP_DR0, RTC_FLAG_BKP);

return 0;
}

u8 RTC_Get(void)
{
    RTC_DateTimeTypeDef RTC_DateTimeStructure;


RTC_GetDateTime(&RTC_DateTimeStructure);

  calendar.w_year = (u16)RTC_DateTimeStructure.Year+2000;
  calendar.w_month = RTC_DateTimeStructure.Month;
  calendar.w_date = RTC_DateTimeStructure.Date;

  calendar.week = RTC_DateTimeStructure.Week;
  calendar.hour = RTC_DateTimeStructure.Hour;
  calendar.min = RTC_DateTimeStructure.Minute;
  calendar.sec = RTC_DateTimeStructure.Second;




return 0;

}

问题: 比如  2018-06-12 23:59:50       ,10秒之后, 变成 2018-06-12 0:0:0  ,日期没有变化


程序开启了: ALARM

void RTC_SetAlarm_main(void)
{
   RTC_AlarmTypeDef RTC_AlarmStructure_main;
   EXTI_InitTypeDef EXTI_InitStructure;
   

    RTC_Get();

    RTC_AlarmCmd(RTC_Alarm_A,DISABLE);

    RTC_AlarmStructure_main.RTC_AlarmTime.RTC_H12     = 0x00;
    RTC_AlarmStructure_main.RTC_AlarmTime.RTC_Hours   = calendar.hour;
    RTC_AlarmStructure_main.RTC_AlarmTime.RTC_Minutes = calendar.min;
    RTC_AlarmStructure_main.RTC_AlarmTime.RTC_Seconds = calendar.sec;

   if(calendar.sec+ALARM_TIME_SEC>=60)
   {
    RTC_AlarmStructure_main.RTC_AlarmTime.RTC_Seconds =  (calendar.sec+ALARM_TIME_SEC)-60;
   
    if((calendar.min+1)>=60)
    {
      RTC_AlarmStructure_main.RTC_AlarmTime.RTC_Minutes = (calendar.min+1)-60;
      if((calendar.hour+1)>=24)
       RTC_AlarmStructure_main.RTC_AlarmTime.RTC_Hours   = (calendar.hour+1)-24;
      else
       RTC_AlarmStructure_main.RTC_AlarmTime.RTC_Hours   = calendar.hour+1;
    }
    else
     RTC_AlarmStructure_main.RTC_AlarmTime.RTC_Minutes = calendar.min+1;
   
   }
   else
    RTC_AlarmStructure_main.RTC_AlarmTime.RTC_Seconds =  calendar.sec+ALARM_TIME_SEC;
//   RTC_AlarmStructure_main.RTC_AlarmDateWeekDay = 0x31;
//   RTC_AlarmStructure_main.RTC_AlarmDateWeekDaySel = RTC_AlarmDateWeekDaySel_Date;
//   RTC_AlarmStructure_main.RTC_AlarmMask = RTC_AlarmMask_DateWeekDay;
   
  // RTC_SetAlarm(RTC_Format_BCD, RTC_Alarm_A, &RTC_AlarmStructure_main);
   
    RTC_SetAlarm(RTC_Format_BIN, RTC_Alarm_A, &RTC_AlarmStructure_main);
   
  
    RTC_ITConfig(RTC_IT_ALRA, ENABLE);
    /* Enable the alarm */
    RTC_AlarmCmd(RTC_Alarm_A, ENABLE);
   
  
   RTC_WaitForSynchro();      
  
}
void RTC_IRQHandler(void)
{
  if(RTC_GetITStatus(RTC_IT_ALRA) != RESET)
  {
    RTC_TimeTypeDef RTC_TimeStructure;
   RTC_AlarmTypeDef RTC_AlarmStructure;


    RTC_ClearITPendingBit(RTC_IT_ALRA);
    EXTI_ClearITPendingBit(EXTI_Line17);
  }
}

好像是ALARM影响了



沙发
mmuuss586| | 2018-6-12 13:53 | 只看该作者
应该是你程序日期没更新,跟踪下程序就知道了呀;
你把时间设置为23:59:50

使用特权

评论回复
板凳
hxb20122012|  楼主 | 2018-6-12 20:23 | 只看该作者
mmuuss586 发表于 2018-6-12 13:53
应该是你程序日期没更新,跟踪下程序就知道了呀;
你把时间设置为23:59:50

有这么测试了,就是开启了ALARM 导致无法更新日期,只是我的RTC必须要开启ALARM,因为我需要不断唤醒MCU.

使用特权

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

本版积分规则

74

主题

564

帖子

1

粉丝