野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 15433|回复: 7

RTC相关问题

[复制链接]
发表于 2016-5-14 11:46:14 | 显示全部楼层 |阅读模式
本人想实现按键调节RTC时间,不考虑断电否。自己可以随时设置时间,参考野火的历程RTC-实时时钟。
    是不是专门调用这个函数  RTC_TimeRegulate(); 而不是把这个函数写到  if (RTC_ReadBackupRegister(RTC_BKP_DR0) != 0x32F2)    里面判断是否断电。请问我理解的对不。我现在通过按键调节时间,需要专门调用RTC_TimeRegulate();见下面只需把  USART_Scanf()函数换成按键获取的值,请问我的思路有问题么?
void RTC_TimeRegulate(void)
{
  uint32_t tmp_hh = 0xFF, tmp_mm = 0xFF, tmp_ss = 0xFF;
  
  printf("\r\n==============Time Settings=====================================\r\n");
  RTC_TimeStructure.RTC_H12     = RTC_H12_AM;
  printf("\r\n  Please Set Hours (00-23)");
  while (tmp_hh == 0xFF)
  {
    tmp_hh = USART_Scanf(0, 23);
    RTC_TimeStructure.RTC_Hours = tmp_hh;
  }
  printf(":  %0.2d\n", tmp_hh);
  
  printf("\r\n  Please Set Minutes (00-59)");
  while (tmp_mm == 0xFF)
  {
    tmp_mm = USART_Scanf(0, 59);
    RTC_TimeStructure.RTC_Minutes = tmp_mm;
  }
  printf(":  %0.2d\n", tmp_mm);
  
  printf("\r\n  Please Set Seconds (00-59)");
  while (tmp_ss == 0xFF)
  {
    tmp_ss = USART_Scanf(0, 59);
    RTC_TimeStructure.RTC_Seconds = tmp_ss;
  }
  printf(":  %0.2d\n", tmp_ss);
  /* Configure the RTC time register */
  if(RTC_SetTime(RTC_Format_BIN, &RTC_TimeStructure) == ERROR)
  {
    printf("\r\n>> !! RTC Set Time failed. !! <<\r\n");
  }
  else
  {
    printf("\r\n>> !! RTC Set Time success. !! <<\r\n");
    RTC_TimeShow();
    /* Indicator for the RTC configuration */
    RTC_WriteBackupRegister(RTC_BKP_DR0, 0x32F2);
  }
  
  tmp_hh = 0xFF;
  tmp_mm = 0xFF;
  tmp_ss = 0xFF;
  printf("\r\n==============Date Settings=====================================\r\n");
  printf("\r\n  Please Set WeekDay (01-07)");
  while (tmp_hh == 0xFF)
  {
    tmp_hh = USART_Scanf(1, 7);
    RTC_DateStructure.RTC_WeekDay = tmp_hh;
  }
  printf(":  %0.2d\n", tmp_hh);
  tmp_hh = 0xFF;
  printf("\r\n  Please Set Date (01-31)");
  while (tmp_hh == 0xFF)
  {
    tmp_hh = USART_Scanf(1, 31);
    RTC_DateStructure.RTC_Date = tmp_hh;
  }
  printf(":  %0.2d\n", tmp_hh);
  
  printf("\r\n  Please Set Month (01-12)");
  while (tmp_mm == 0xFF)
  {
    tmp_mm = USART_Scanf(1, 12);
    RTC_DateStructure.RTC_Month = tmp_mm;
  }
  printf(":  %0.2d\n", tmp_mm);
  
  printf("\r\n  Please Set Year (00-99)");
  while (tmp_ss == 0xFF)
  {
    tmp_ss = USART_Scanf(0, 99);
    RTC_DateStructure.RTC_Year = tmp_ss;
  }
  printf(":  %0.2d\n", tmp_ss);
  /* Configure the RTC date register */
  if(RTC_SetDate(RTC_Format_BIN, &RTC_DateStructure) == ERROR)
  {
    printf("\r\n>> !! RTC Set Date failed. !! <<\r\n");
  }
  else
  {
    printf("\r\n>> !! RTC Set Date success. !! <<\r\n");
    RTC_DateShow();
    /* Indicator for the RTC configuration */
    RTC_WriteBackupRegister(RTC_BKP_DR0, 0x32F2);
  }
}

回复

使用道具 举报

发表于 2016-5-14 17:57:28 | 显示全部楼层
是的,就是这样,你随时可以通过这种形式来调整时间,我们的例程里是加了备份域判断而已
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-5-17 09:12:12 | 显示全部楼层
你好 请问一下你们的RTC例程中没有写RTC中断么
回复 支持 反对

使用道具 举报

发表于 2016-5-17 09:58:09 | 显示全部楼层
松子玲叶 发表于 2016-5-17 09:12
你好 请问一下你们的RTC例程中没有写RTC中断么

是的,没有使用中断
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-5-17 10:09:36 | 显示全部楼层
请问一下 RTC实时时钟不是必要要进行秒中断么?
回复 支持 反对

使用道具 举报

发表于 2016-5-17 10:12:20 | 显示全部楼层
松子玲叶 发表于 2016-5-17 10:09
请问一下 RTC实时时钟不是必要要进行秒中断么?

不需要,时间的寄存器会一直更新,需要知道时间的时候再去读就可以了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-5-17 10:28:58 | 显示全部楼层
你好火哥 是不是   Rtctmp = RTC_TimeStructure.RTC_Seconds;我现在想用RTC中断来定时 会不会影响到你的这个程序的 “拼命读”

        while(1)
        {
    RTC_GetTime(RTC_Format_BIN, &RTC_TimeStructure);
          RTC_GetDate(RTC_Format_BIN, &RTC_DateStructure);
          if(Rtctmp != RTC_TimeStructure.RTC_Seconds)
    {
      printf("The Date :  Y:20%0.2d - M:%0.2d - D:%0.2d - W:%0.2d\r\n", RTC_DateStructure.RTC_Year,RTC_DateStructure.RTC_Month, RTC_DateStructure.RTC_Date,RTC_DateStructure.RTC_WeekDay);       
      printf("The Time :  %0.2d:%0.2d:%0.2d \r\n\r\n", RTC_TimeStructure.RTC_Hours, RTC_TimeStructure.RTC_Minutes, RTC_TimeStructure.RTC_Seconds);       
      (void)RTC->DR;
    }
    Rtctmp = RTC_TimeStructure.RTC_Seconds;
        }
}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-5-17 12:02:41 | 显示全部楼层
你好火哥 ,我在网上下载的TIM按键捕获,里面的文件是空的     TIM—输入捕获(电容按键),麻烦重新发一个 谢谢 我参考一下
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2025-1-12 03:58 , Processed in 0.115704 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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