STM32的的RTC可以自动判断时间吗?就像DS1302一样

[复制链接]
3087|12
 楼主| mdk55555 发表于 2017-4-22 22:59 | 显示全部楼层 |阅读模式
STM32的的RTC可以自动判断时间吗?就像DS1302一样
xiaolong12 发表于 2017-4-24 08:40 | 显示全部楼层
好像是不带自动日期适应的,比如根据日期自动计算星期肯定是没有的。
haokeer 发表于 2017-4-24 09:59 | 显示全部楼层
   STM32的RTC模块和时钟配置系统(RCC_BDCR寄存器)处于后备区域,即在系统复位或从待机模式唤醒后, RTC的设置和时间维持不变。
    STM32F0的RTC模块和F1的RTC模块最大区别在于F0模块中有“DATE”和“TIME”寄存器,也就是可以直接读取寄存器里面的值,而F1是秒计数寄存器的值,需要通过相关算法下才能得到时间的值。
rmbass 发表于 2017-4-26 18:22 | 显示全部楼层
  "RTC"是Real Time Clock 的简称,意为实时时钟。stm32提供了一个秒中断源和一个闹钟中断源,修改计数器的值可以重新设置系统当前的时间和日期。
yysforever 发表于 2017-4-26 20:16 | 显示全部楼层
RTC模块之所以具有实时时钟功能,是因为它内部维持了一个独立的定时器,通过配置,可以让它准确地每秒钟中断一次。但实际上,RTC就只是一个定时器而已,掉电之后所有信息都会丢失,因此我们需要找一个地方来存储这些信息,于是就找到了备份寄存器。其在掉电后仍然可以通过纽扣电池供电,所以能时刻保存这些数据。
冰是睡着的冰 发表于 2017-4-28 09:18 | 显示全部楼层
  1. u8 RTC_Set(u16 year,u8 mon,u8 day,u8 hour,u8 min,u8 sec)
  2. {
  3.     u16 t;
  4.     u32 secCount=0;
  5.     if(year<1970||year>2099)
  6.         return 1;//³ö´í
  7.     for(t=1970;t<year;t++)    //把所有年份的秒钟相加
  8.     {
  9.         if(Is_Leap_Year(t))//闰年
  10.             secCount+=31622400;//闰年的秒钟数
  11.         else
  12.             secCount+=31536000;   
  13.     }
  14.     mon-=1;//先减掉一个月再算秒数(如现在是5月10日,则只需要算前4个月的天数,再加上10天,然后计算秒数)
  15.     for(t=0;t<mon;t++)
  16.     {
  17.         secCount+=(u32)mon_table[t]*86400;//月份秒钟数相加
  18.         if(Is_Leap_Year(year)&&t==1)
  19.             secCount+=86400;//闰年,2月份增加一天的秒钟数
  20.     }

  21.     secCount+=(u32)(day-1)*86400;//把前面日期的秒钟数相加(这一天还没过完,所以-1)
  22.     secCount+=(u32)hour*3600;//小时秒钟数
  23.     secCount+=(u32)min*60;//分钟秒钟数
  24.     secCount+=sec;
  25. //    RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR    | RCC_APB1Periph_BKP,ENABLE);
  26. //    PWR_BackupAccessCmd(ENABLE);
  27.     RTC_SetCounter(secCount);//设置RTC计数器的值
  28.     RTC_WaitForLastTask();    //等待最近一次对RTC寄存器的写操作完成
  29.     RTC_Get();//更新时间
  30.     return 0;
  31. }
  32. 给你看一段代码,都需要自己去匹配算法的。
jouney316 发表于 2017-4-28 09:24 | 显示全部楼层
RTC 模块拥有一组连续计数的计数器,在相应软件配置下,可提供时钟日历的功能。RTC的技术器是一个32位的计数器,使用32.768khz的外部晶振。
l科科1987 发表于 2017-4-29 22:02 | 显示全部楼层
RTC最大可以定时多长呢?
Dennis-Zhou 发表于 2017-4-29 22:07 | 显示全部楼层
l科科1987 发表于 2017-4-29 22:02
RTC最大可以定时多长呢?


在大部份的32位操作系统上,此“time_t”数据模式使用一个有正负号的32位元整数(signedint32)存储计算的秒数。也就是说最大可以计数的秒数为 2^31次方 可以算得:
                2^31/3600/24/365 ≈ 68年
所以依照此“time_t”标准,在此格式能被表示的最后时间是2038年1月19日03:14:07,星期二(UTC)。超过此一瞬间,时间将会被掩盖(wrap around)且在内部被表示为一个负数,并造成程序无法工作,因为它们无法将此时间识别为2038年,而可能会依个别实作而跳回1970年或1901年。
原味_郭 发表于 2017-4-30 09:23 | 显示全部楼层
你用的是M3的RTC,还是M4的RTC呢?M4的RTC的中断好多了。
dongbaohui 发表于 2017-4-30 09:23 | 显示全部楼层
RTC—real time clock,实时时钟,主要包含日历、闹钟和自动唤醒这三部分的功能,其中的日历功能我们使用的最多。日历包含两个32bit的时间寄存器,可直接输出时分秒,星期、月、日、年。比起F103系列的RTC只能输出秒中断,剩下的其他时间需要软件来实现,429的RTC可谓是脱胎换骨,让我们在软件编程时大大降低了难度。
enginezhong 发表于 2017-4-30 19:43 | 显示全部楼层
不可以,时钟算法必须自己写的。
ahhsyf 发表于 2017-4-30 19:50 | 显示全部楼层
RTC只是提供一个准确的1s中断而已,而不是有时分秒寄存器的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

151

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部