OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 9947|回复: 10

初学STM32 RTC遇到的问题

[复制链接]

6

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2012-7-31
在线时间
2 小时
发表于 2012-8-15 13:27:07 | 显示全部楼层 |阅读模式

初学请教, 以下原代码中有些不太理解,请看红色字部分,请原子哥给讲讲,谢谢!

u8 RTC_Get(void)
{
 static u16 daycnt=0;
 u32 timecount=0;
 u32 temp=0;
 u16 temp1=0;  
   
 timecount=RTC->CNTH;//得到计数器中的值(秒钟数)
 timecount<<=16;
 timecount+=RTC->CNTL;   

 temp=timecount/86400;   //得到天数(秒钟数对应的) 2的32次方除以86400得到全部136年的天数,是吗?
 if(daycnt!=temp)//超过一天了
 {  
  daycnt=temp;
  temp1=1970; //从1970年开始
  while(temp>=365)
  {    
   if(Is_Leap_Year(temp1))//是闰年
   {
    if(temp>=366)temp-=366;//闰年的秒钟数
    else break; 
   }
   else temp-=365;   //平年
   temp1++; 
  }  
  timer.w_year=temp1;//得到年份
  temp1=0;
  while(temp>=28)//超过了一个月
  {
   if(Is_Leap_Year(timer.w_year)&&temp1==1)//当年是不是闰年/2月份
   {
    if(temp>=29)temp-=29;//闰年的秒钟数
    else break;
   }
   else
   {
    if(temp>=mon_table[temp1])temp-=mon_table[temp1];//平年
    else break;
   }
   temp1++; 
  }
  timer.w_month=temp1+1;//得到月份
  timer.w_date=temp+1;  //得到日期
 }
 temp=timecount%86400;     //得到秒钟数    如果是2的32次方除86400求余的话是23296  
 timer.hour=temp/3600;     //小时
 timer.min=(temp%3600)/60; //分钟 
 timer.sec=(temp%3600)%60; //秒钟

以上红色部分都不太理解,请原子哥给讲解下可以吗?谢谢!

 timer.week=RTC_Get_Week(timer.w_year,timer.w_month,timer.w_date);//获取星期  
 return 0;
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

53

主题

324

帖子

0

精华

高级会员

Rank: 4

积分
598
金钱
598
注册时间
2012-6-18
在线时间
7 小时
发表于 2012-8-15 13:44:01 | 显示全部楼层
借楼主地盘问一下各位
 timecount=RTC->CNTH;//得到计数器中的值(秒钟数)
 timecount<<=16;
 timecount+=RTC->CNTL;  
这几句话有什么用 

还有 我这个板子昨天下的RTC例程 今天上电就白屏 没有时间了
回复 支持 反对

使用道具 举报

6

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2012-7-31
在线时间
2 小时
 楼主| 发表于 2012-8-15 14:03:03 | 显示全部楼层
回复【2楼】565956807@qq.com:
---------------------------------
老大,来了也不顺便的帮我解决下不懂的,:(......

我把我的理解告诉你下吧:
timecount=RTC->CNTH; //得到高16位的计数器
timecount<<=16;   //高位计数器是从16位开始的(16~31)
timecount+=RTC->CNTL;  //把高16位(16~31)计数器和低16位的计数器(0~15)相加得到32计数器。

白屏的原因:是不是你的开发板上电池没装上啊?

回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2012-8-15 14:06:24 | 显示全部楼层
回复【楼主位】overlordtony:
---------------------------------
一分钟有多少秒钟?
一小时有多少分钟?
一天有多少小时?
一年有多少天?
这些你知道吧?
如果知道,上面的计算应该可以看懂.


回复【2楼】565956807@qq.com:
---------------------------------
得到秒钟数.

白屏,看此贴:
http://www.openedv.com/posts/list/4610.htm
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

6

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2012-7-31
在线时间
2 小时
 楼主| 发表于 2012-8-15 14:13:31 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
谢谢原子大哥,那这得到的是整个136年的时分秒吗?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2012-8-15 14:41:50 | 显示全部楼层
不是
回复 支持 反对

使用道具 举报

6

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2012-7-31
在线时间
2 小时
 楼主| 发表于 2012-8-15 14:51:40 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
老大,你就多说几句话完整的告诉我下吧!拜托.........
回复 支持 反对

使用道具 举报

3

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2012-6-28
在线时间
0 小时
发表于 2012-8-15 15:51:33 | 显示全部楼层
回复【7楼】overlordtony:
---------------------------------
应该是现在时间的时分秒
回复 支持 反对

使用道具 举报

6

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2012-7-31
在线时间
2 小时
 楼主| 发表于 2012-8-15 16:03:31 | 显示全部楼层
回复【8楼】xdz1989:
---------------------------------
谢谢!要是这代码有个完整的解说就好了!!!
回复 支持 反对

使用道具 举报

3

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2012-6-28
在线时间
0 小时
发表于 2012-8-19 16:37:32 | 显示全部楼层
回复【9楼】overlordtony:
---------------------------------
自己多看看,应该也不难,觉得理解了自己多加些注释
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
23
金钱
23
注册时间
2012-6-23
在线时间
0 小时
发表于 2012-8-19 18:02:31 | 显示全部楼层
学习中,找个板凳
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-27 10:40

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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