打印

帮我看看STM32F103做RTC时的问题

[复制链接]
3876|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
妙不可言|  楼主 | 2010-12-2 17:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我做了个RTC。。初始化时间然后查询出来都是正常的。。但是设置的时候代码如下:

void RTC_WaitForLastTask(void)
{
  /* Loop until RTOFF flag is set */
  while ((RTC->CRL & RTC_FLAG_RTOFF) == (u16)RESET)
  {
  }
}


void Time_Adjust(void)
{
  /* Wait until last write operation on RTC registers has finished */
  RTC_WaitForLastTask();
  /* Change the current time */
  RTC_SetCounter(Time_Regulate());
//Time_Regulate()算出计数值
  /* Wait until last write operation on RTC registers has finished */
  RTC_WaitForLastTask();
}


结果设置的时候一直停在:  while ((RTC->CRL & RTC_FLAG_RTOFF) == (u16)RESET)

然后我直接用RTC_SetCounter(Time_Regulate());设置时间,不加前面的RTC_WaitForLastTask();

结果出来是日期设置对了。 。时间还是初始化的时间跑出来的结果。。。

求高手OR版主指点。。。。。
沙发
妙不可言|  楼主 | 2010-12-2 18:29 | 只看该作者
大家都不发表下意见么。。。自己顶一下。。。我用的是固件库。。。应该是3.0。。。

使用特权

评论回复
板凳
妙不可言|  楼主 | 2010-12-2 19:33 | 只看该作者
Jlinnk挂上去仿。。。现在的设置的时候没加void RTC_WaitForLastTask(void)。。。
结果是日期设置对了。。时间没设下去。。。。断电重新初始化也是,初始化的日期是对的。。时间还是那个在跑的。。。貌似就是时间没设置下去。。唉。。还是没人理会啊。。。。

使用特权

评论回复
地板
huatong| | 2010-12-2 20:03 | 只看该作者
本帖最后由 huatong 于 2010-12-2 20:07 编辑

没有用库,写寄存器的话就可以帮你,你跟踪入去,看一下各个RTC寄存器的状态.

使用特权

评论回复
5
妙不可言|  楼主 | 2010-12-2 20:45 | 只看该作者

用库也是一样写寄存器吧。。。

4# huatong 用库也是一样写寄存器吧。。。只是库用的宏定义比较多。。看起来比较清楚一点。。
我有看最后算出来要写下去的值。。。。和读出来的值差比较多。。。。。要写下去的值
是用年月日时分秒算出来的。。。读出来的值再转化成年月日时分秒。。这两个值我都验证过了。。。是对的。。也就是说。。一个值写进去。。。读出来却会差很多。。。不知道是写出了问题。。还是读出了问题。。。。我想读的话。。就一条语句。。直接读寄存器。。。应该是不会有问题的啊。。。但是写下去。。读出来日期是对的。。时间是不对的。。我就奇怪了。。。。
      以上都是没加RTC_WaitForLastTask();也就是没加:
while ((RTC->CRL & RTC_FLAG_RTOFF) == (u16)RESET)//RTC_FLAG_RTOFF是1<<5
  {
  }

的情况下仿真的。。。
因为加了RTC_WaitForLastTask();会在那循环下不去。。。。







使用特权

评论回复
6
妙不可言|  楼主 | 2010-12-2 21:12 | 只看该作者
:dizzy:问题基本上确定了。。。应该是初始化的时候值有写进去。。。设置的时候值没写进去。。。。前面说读出来日期是对的。。是因为我学了个例程里面写的。。。做了个判断。。时间超过了一天才更新年月日。。。。因为没更新年月日。。所以看上去像是对的。。。悲剧啊。。。。一直在这自说自话。 。。。

使用特权

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

本版积分规则

0

主题

12

帖子

1

粉丝