打印

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

[复制链接]
2450|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
mdk55555|  楼主 | 2017-4-22 22:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
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提供了一个秒中断源和一个闹钟中断源,修改计数器的值可以重新设置系统当前的时间和日期。

使用特权

评论回复
5
yysforever| | 2017-4-26 20:16 | 只看该作者
RTC模块之所以具有实时时钟功能,是因为它内部维持了一个独立的定时器,通过配置,可以让它准确地每秒钟中断一次。但实际上,RTC就只是一个定时器而已,掉电之后所有信息都会丢失,因此我们需要找一个地方来存储这些信息,于是就找到了备份寄存器。其在掉电后仍然可以通过纽扣电池供电,所以能时刻保存这些数据。

使用特权

评论回复
6
冰是睡着的冰| | 2017-4-28 09:18 | 只看该作者
u8 RTC_Set(u16 year,u8 mon,u8 day,u8 hour,u8 min,u8 sec)
{
    u16 t;
    u32 secCount=0;
    if(year<1970||year>2099)
        return 1;//³ö´í
    for(t=1970;t<year;t++)    //把所有年份的秒钟相加
    {
        if(Is_Leap_Year(t))//闰年
            secCount+=31622400;//闰年的秒钟数
        else
            secCount+=31536000;   
    }
    mon-=1;//先减掉一个月再算秒数(如现在是5月10日,则只需要算前4个月的天数,再加上10天,然后计算秒数)
    for(t=0;t<mon;t++)
    {
        secCount+=(u32)mon_table[t]*86400;//月份秒钟数相加
        if(Is_Leap_Year(year)&&t==1)
            secCount+=86400;//闰年,2月份增加一天的秒钟数
    }

    secCount+=(u32)(day-1)*86400;//把前面日期的秒钟数相加(这一天还没过完,所以-1)
    secCount+=(u32)hour*3600;//小时秒钟数
    secCount+=(u32)min*60;//分钟秒钟数
    secCount+=sec;
//    RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR    | RCC_APB1Periph_BKP,ENABLE);
//    PWR_BackupAccessCmd(ENABLE);
    RTC_SetCounter(secCount);//设置RTC计数器的值
    RTC_WaitForLastTask();    //等待最近一次对RTC寄存器的写操作完成
    RTC_Get();//更新时间
    return 0;
}
给你看一段代码,都需要自己去匹配算法的。

使用特权

评论回复
7
jouney316| | 2017-4-28 09:24 | 只看该作者
RTC 模块拥有一组连续计数的计数器,在相应软件配置下,可提供时钟日历的功能。RTC的技术器是一个32位的计数器,使用32.768khz的外部晶振。

使用特权

评论回复
8
l科科1987| | 2017-4-29 22:02 | 只看该作者
RTC最大可以定时多长呢?

使用特权

评论回复
9
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年。

使用特权

评论回复
10
原味_郭| | 2017-4-30 09:23 | 只看该作者
你用的是M3的RTC,还是M4的RTC呢?M4的RTC的中断好多了。

使用特权

评论回复
11
dongbaohui| | 2017-4-30 09:23 | 只看该作者
RTC—real time clock,实时时钟,主要包含日历、闹钟和自动唤醒这三部分的功能,其中的日历功能我们使用的最多。日历包含两个32bit的时间寄存器,可直接输出时分秒,星期、月、日、年。比起F103系列的RTC只能输出秒中断,剩下的其他时间需要软件来实现,429的RTC可谓是脱胎换骨,让我们在软件编程时大大降低了难度。

使用特权

评论回复
12
enginezhong| | 2017-4-30 19:43 | 只看该作者
不可以,时钟算法必须自己写的。

使用特权

评论回复
13
ahhsyf| | 2017-4-30 19:50 | 只看该作者
RTC只是提供一个准确的1s中断而已,而不是有时分秒寄存器的。

使用特权

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

本版积分规则

13

主题

151

帖子

1

粉丝