大家好。
今天我用F429的RTC功能,发现用函数“HAL_RTC_GetTime”获取RTC当前时间时,保存数据的结构体没有变化,读出来的数值一直不变。但是如果复位单片机,再读数据,则可以正常读取数据一次,然后就又不变了。具体描述如下:
如上图,A区域是开机后,我第一次按按键4,然后打印了时间数据。
等了大概3秒左右,我又按按键,打印了B区域的数据,秒时间没有变化。
然后我复位单片机,再按按键,打印了区域C的数据,时间比之前的有变化了。
然后我又等了大概3秒左右,我又按按键,打印了D区域的数据,秒时间没有变化。
上面是仿真时,用函数“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的开始任务中给时间和日期赋值的代码:
3、下面是实体按键的代码:
出问题的就是下面获取时间的函数。按下按键后,保存时间数据的结构体的内容都不变化。
一周热门 更多>