20780|28

70

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

STM32F103的RTC有些鸡肋了 [复制链接]

本以为可以省去1片外置RTC芯片,但发现STM32内置RTC只能计时,却没有年月日的功能。
用户一直开机上电还可以用程序维护,但如果断电24小时以上,就无法确定现在的日期了。
建议ST公司在RTC中增加日期功能,至少能计日。
此帖出自stm32/stm8论坛

最新回复

                                 据说确实如此。   详情 回复 发表于 2007-12-25 13:29
点赞 关注
 

回复
举报

69

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

备用

                                 你可以预定0x0000是dd-mm-yy. 然后根据RTC换算出具体的时间日期。
此帖出自stm32/stm8论坛
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

怎么会是鸡肋?没有年月日的功能不是问题,可以方便地用

不明白为什么断电24小时以上,就无法确定现在的日期了?

回忆一下在UNIX的世界,所有的时间都是以1970年1月1日0时0分0秒为基准,基于这个原理,你只要在第一次校准RTC时设置一个基准时间,以后每次开机根据这个基准时间就可以很方便地算出当前时间。比如将把基准时间设为2008年1月1日0时0分0秒。

这样不管CPU掉电多长时间,只要维持RTC的电池有电,时间就不会丢失。
此帖出自stm32/stm8论坛
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

4
 

根据2楼的提示,可以把0x00000000定义为2008年1月1日0时0分0秒

                                 之后照此换算即可。。。。。
此帖出自stm32/stm8论坛
 
 
 

回复

23

帖子

0

TA的资源

一粒金砂(初级)

5
 

只要功耗做的好,用这种RTC还是很有用

                                 用mktime()转换即可,标准C函数
此帖出自stm32/stm8论坛
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

6
 

1.4uA的功耗是否满足要求?

                                 STM32在只维持RTC运行时的典型功耗为1.4uA。
此帖出自stm32/stm8论坛
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

7
 

真的是1.4uA吗?

不止1.4uA吧,感觉比RTC芯片耗电多了。在板上挂一块CR2032的电池,一天降了0.015伏,照这样下去,电池不知道能用多久
此帖出自stm32/stm8论坛
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

8
 

你必须把除了RTC之外的所有电路关闭,1.4uA只是维持RTC运行

请参考STM32的数据手册,表14。
此帖出自stm32/stm8论坛
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

9
 

agree

                                 同意楼上
此帖出自stm32/stm8论坛
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

10
 

签名

                                 我的签名怎么不出来?
此帖出自stm32/stm8论坛
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

11
 

请浪淘沙推荐一下哪块板子可以用于评估低功耗,谢谢

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

12
 

看来需要改变思维了

首先谢谢 浪淘沙 。

以前用51搭的系统都用硬件RTC芯片,读取日期和时间消息。
从不敢用C语言中的Time函数。

现在由于资源和速度的大大提升,终于可以使用了,以提高编程效率。

我认为RTC例程不是太好,尤其是
    /* Reset RTC Counter when Time is 23:59:59 */
    if(RTC_GetCounter() == 0x00015180)
    {
      RTC_SetCounter(0x0);
      /* Wait until last write operation on RTC registers has finished */
      RTC_WaitForLastTask();
    }
容易误导counter超不过24时。

将用新方法编程的输出效果,给大家看看
此帖出自stm32/stm8论坛
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

13
 

回11楼:试试EK-STM32F

                                 看见刘工在他的帖子中(64楼)回答了你的问题:https://bbs.eeworld.com.cn/club/bbs/list.asp?Page=1&boardid=49&t=2775568
此帖出自stm32/stm8论坛
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

14
 

我在keil 设置向导中找到如下图

https://bbs.eeworld.com.cn/upfiles/img/200712/20071214214132234.jpg

keil MDK 3.15B 中的带年月日值,不知如何操作?  浪淘沙请指教下
此帖出自stm32/stm8论坛
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

15
 

不好意思,我是光说不练,没有具体操作过

我只负责与STM32功能性相关部分的研究,具体如何使用某个具体的开发工具的问题,要有其他人来回答了。

看看坛里有谁用过这部分?
此帖出自stm32/stm8论坛
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

16
 

14楼:那应该只是设置值而已

                                 keil可以在程序里做这样的选择菜单,方便使用,不用直接改#Define什么的,参见startup.s
此帖出自stm32/stm8论坛
 
 
 

回复

88

帖子

0

TA的资源

一粒金砂(初级)

17
 

有点价值,尿一个纪念

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

18
 

楼上的四处撒尿! 呵呵

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

19
 

关注之中~~~

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

20
 

STM32年月日计算程序

如果将RTC计数器设置成1秒进位1次,RTC计数器溢出时间大概有136年,所以不必考虑时间会溢出的问题。

先设置好记时起点的年月日时分秒。
然后调用下面的计算程序即可。
我只是简单测试了一下该实时时钟,外接了一个32.768K的晶振。
但我感觉该实时时钟的时间精度不太高,如果要精确的话,恐怕不太适用。
这只是我的测试结论,不一定准确,大家可实验一下。
下面的源程序经过测试了,可参考一下。
/*源程序*/
const uchar MaxDayArray[12]={31,28,31,30,31,30,31,31,30,31,30,31}; //
uchar IRTYear,IRTMonth,IRTDay,IRTHour,IRTMinute,IRTSecond;

计算时分秒:
void Time_GetValue(u32 TimeVar) 
{
  u32 THH = 0, TMM = 0, TSS = 0;
  /* Compute  hours */
  THH = TimeVar/3600;
  /* Compute minutes */
  TMM = (TimeVar % 3600)/60;
  /* Compute seconds */
  TSS = (TimeVar % 3600)% 60;
  RTHour=(uchar)THH;
  RTMinute=(uchar)TMM;
  RTSecond=(uchar)TSS;
}
调用方式:Time_GetValue(RTC_GetCounter());

计算年月日:
/*CaculateTime :Caculate new Time*/
void CaculateTime(void)
{
    uint IYear;
    IYear=2000+IRTYear;
    if(2==IRTMonth) { //
        IRTDay++;
        if((IYear%4==0&&IYear%100!=0)||(IYear%400==0)) { //leap year
            if ((IRTDay>MaxDayArray[IRTMonth-1]+1)) {
                //Day overflow
                IRTDay=1;
                IRTMonth++;
                if(IRTMonth>12) {
                    //Month overflow
                    IRTMonth=1;
                    IRTYear++;
                    if (IRTYear>99) {
                        //Year overflow
                        IRTYear=0;
                    }
                }
            }
        } else { //no leap year
            if ((IRTDay>MaxDayArray[IRTMonth-1])) {
                IRTDay=1;
                IRTMonth++;
                if(IRTMonth>12) {
                    //Month overflow
                    IRTMonth=1;
                    IRTYear++;
                    if (IRTYear>99) {
                        //Year overflow
                        IRTYear=0;
                    }
                }
            }
        }
    } else { //
        IRTDay++;
        if ((IRTDay>MaxDayArray[IRTMonth-1])) {
            IRTDay=1;
            IRTMonth++;
            if(IRTMonth>12) {
                //Month overflow
                IRTMonth=1;
                IRTYear++;
                if (IRTYear>99) {
                    //Year overflow
                    IRTYear=0;
                }
            }        
        }
    }
}
调用方式:
            TempValue=RTC_GetCounter();
            do while(TempValue > 0x00015180);
            {
                 //
                 CaculateTime();
                 TempValue -=0x00015180;
            } 新生成的年月日时分秒就是当前的年月日。
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表