F429 RTC模块获取RTC时间函数的疑问

2019-07-20 05:48发布

大家好。
今天我用F429的RTC功能,发现用函数“HAL_RTC_GetTime”获取RTC当前时间时,保存数据的结构体没有变化,读出来的数值一直不变。但是如果复位单片机,再读数据,则可以正常读取数据一次,然后就又不变了。具体描述如下:

2018-10-10_141722.png
如上图,A区域是开机后,我第一次按按键4,然后打印了时间数据。
             等了大概3秒左右,我又按按键,打印了B区域的数据,秒时间没有变化。
             然后我复位单片机,再按按键,打印了区域C的数据,时间比之前的有变化了。
             然后我又等了大概3秒左右,我又按按键,打印了D区域的数据,秒时间没有变化。

2018-10-10_140025.png
上面是仿真时,用函数“HAL_RTC_GetTime”获取的值保存的目标结构体,发现按下按键的时候,只要亚秒会变化,其他的如秒和分都不变化。
有明白的前辈知道这是怎么回事吗?求指点。

-------------------------------------------------------------------------------------
下面是部分代码:

1、下面是由cubemx生成的rtc初始化代码:
[mw_shl_code=c,true]#include "rtc.h"

/* USER CODE BEGIN 0 */

/* USER CODE END 0 */

RTC_HandleTypeDef hrtc;

/* RTC init function */
void MX_RTC_Init(void)
{

    /**Initialize RTC Only
    */
  hrtc.Instance = RTC;
  hrtc.Init.HourFormat = RTC_HOURFORMAT_24;
  hrtc.Init.AsynchPrediv = 127;
  hrtc.Init.SynchPrediv = 255;
  hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;
  hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
  hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
  if (HAL_RTC_Init(&hrtc) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }

}

void HAL_RTC_MspInit(RTC_HandleTypeDef* rtcHandle)
{

  if(rtcHandle->Instance==RTC)
  {
  /* USER CODE BEGIN RTC_MspInit 0 */

  /* USER CODE END RTC_MspInit 0 */
    /* RTC clock enable */
    __HAL_RCC_RTC_ENABLE();
  /* USER CODE BEGIN RTC_MspInit 1 */

  /* USER CODE END RTC_MspInit 1 */
  }
}

void HAL_RTC_MspDeInit(RTC_HandleTypeDef* rtcHandle)
{

  if(rtcHandle->Instance==RTC)
  {
  /* USER CODE BEGIN RTC_MspDeInit 0 */

  /* USER CODE END RTC_MspDeInit 0 */
    /* Peripheral clock disable */
    __HAL_RCC_RTC_DISABLE();
  /* USER CODE BEGIN RTC_MspDeInit 1 */

  /* USER CODE END RTC_MspDeInit 1 */
  }
} [/mw_shl_code]


2、下面是我在FreeRTOS的开始任务中给时间和日期赋值的代码:
2018-10-10_140327.png

3、下面是实体按键的代码:
出问题的就是下面获取时间的函数。按下按键后,保存时间数据的结构体的内容都不变化。
2018-10-10_140300.png
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。