阿波罗HAL库获取RTC时间的问题?

2019-07-21 00:59发布

情况是这样的:
     我在调试模式下系统获取RTC时间然后显示在显示屏上是OK的,时间是走的,
但是我在非调试模式下给系统上电运行发现屏幕上的时间是停止不动的。
我已开始以为是程序跑飞了,但是测试下来ucos其它任务都是正常运行的,
经测试以下hal库函数:红 {MOD}部分是为了观察用的(没办法了,调试模式完全是正常的)
HAL_StatusTypeDef HAL_RTC_GetTime(RTC_HandleTypeDef *hrtc, RTC_TimeTypeDef *sTime, uint32_t Format)
{
  uint32_t tmpreg = 0;

  /* Check the parameters */
  assert_param(IS_RTC_FORMAT(Format));
  
  /* Get subseconds structure field from the corresponding register */
  sTime->SubSeconds = (uint32_t)(hrtc->Instance->SSR);
  
  /* Get SecondFraction structure field from the corresponding register field*/
  sTime->SecondFraction = (uint32_t)(hrtc->Instance->PRER & RTC_PRER_PREDIV_S);

  /* Get the TR register */
  tmpreg = (uint32_t)(hrtc->Instance->TR & RTC_TR_RESERVED_MASK);
  
  /* Fill the structure fields with the read parameters */
  sTime->Hours = (uint8_t)((tmpreg & (RTC_TR_HT | RTC_TR_HU)) >> 16);
  sTime->Minutes = (uint8_t)((tmpreg & (RTC_TR_MNT | RTC_TR_MNU)) >>8);
  sTime->Seconds = (uint8_t)(tmpreg & (RTC_TR_ST | RTC_TR_SU));
  sTime->TimeFormat = (uint8_t)((tmpreg & (RTC_TR_PM)) >> 16);
  
  /* Check the input parameters format */
  if(Format == RTC_FORMAT_BIN)
  {
    /* Convert the time structure parameters to Binary format */
       LED0=!LED0;
    sTime->Hours = (uint8_t)RTC_Bcd2ToByte(sTime->Hours);
    sTime->Minutes = (uint8_t)RTC_Bcd2ToByte(sTime->Minutes);
    sTime->Seconds = (uint8_t)RTC_Bcd2ToByte(sTime->Seconds);
        if((sTime->Seconds)%5==0){beep();}
  }
  
  return HAL_OK;
}

系统运行发现LED0亮灭交替,但是beep始终不响,故判定RTC获取的时间始终没变!
纠结的是只要调试,这个时间就是正常走的而且beep 5s会嘀一下。。。。。。

这个问题如何解决,有遇到这种情况的么?

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
杉侠
1楼-- · 2019-07-22 02:55
 精彩回答 2  元偷偷看……
蝙蝠侠
2楼-- · 2019-07-22 08:28
战舰水手 发表于 2017-4-19 16:28
是的,我后来也找到原因了,库函数的note还是要看看才可以少纠结

你好楼主,这个库函数的返回值不是状态吗?怎么把RTC的时间值读出来啊?
战舰水手
3楼-- · 2019-07-22 14:20
蝙蝠侠 发表于 2017-6-26 14:06
你好楼主,这个库函数的返回值不是状态吗?怎么把RTC的时间值读出来啊?

返回的是状态,他有个全局的结构体是在这个函数里面被赋值的
STM32xpiggy
4楼-- · 2019-07-22 15:33
6楼说得对啊

一周热门 更多>