stm32f401 rtc时间超过24小时的问题

2019-07-20 01:28发布

原子哥及各位大侠,

有一rtc问题请教,我们用的st32f401的芯片,开机后会一直打印rtc时间,跑了一天一夜之后,rtc的小时数超过了24,变成了27小时xx分。
然后我用mdk断电去调试,时间又变成了24小时xx分。RTC_GetTime中 RTC_TimeStruct->RTC_Hours = (uint8_t)((tmpreg & (RTC_TR_HT | RTC_TR_HU)) >> 16);可以看到此变量为0x24;
RTC_TimeStruct->RTC_Hours = (uint8_t)RTC_Bcd2ToByte(RTC_TimeStruct->RTC_Hours);的值为0x18.不应该是0吗?

请问各位大侠是否有经验,如何破?
谢谢!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
12条回答
xuande
1楼-- · 2019-07-20 07:18
 精彩回答 2  元偷偷看……
止天
2楼-- · 2019-07-20 12:56
是不是编码格式的问题
nakil
3楼-- · 2019-07-20 16:16
止天 发表于 2016-9-12 11:54
是不是编码格式的问题

用的官方的库。
void RTC_GetTime(uint32_t RTC_Format, RTC_TimeTypeDef* RTC_TimeStruct)
{
  uint32_t tmpreg = 0;

  /* Check the parameters */
  assert_param(IS_RTC_FORMAT(RTC_Format));

  /* Get the RTC_TR register */
  tmpreg = (uint32_t)(RTC->TR & RTC_TR_RESERVED_MASK);
  
  /* Fill the structure fields with the read parameters */
  RTC_TimeStruct->RTC_Hours = (uint8_t)((tmpreg & (RTC_TR_HT | RTC_TR_HU)) >> 16);
  RTC_TimeStruct->RTC_Minutes = (uint8_t)((tmpreg & (RTC_TR_MNT | RTC_TR_MNU)) >>8);
  RTC_TimeStruct->RTC_Seconds = (uint8_t)(tmpreg & (RTC_TR_ST | RTC_TR_SU));
  RTC_TimeStruct->RTC_H12 = (uint8_t)((tmpreg & (RTC_TR_PM)) >> 16);  

  /* Check the input parameters format */
  if (RTC_Format == RTC_Format_BIN)
  {
    /* Convert the structure parameters to Binary format */
    RTC_TimeStruct->RTC_Hours = (uint8_t)RTC_Bcd2ToByte(RTC_TimeStruct->RTC_Hours);
    RTC_TimeStruct->RTC_Minutes = (uint8_t)RTC_Bcd2ToByte(RTC_TimeStruct->RTC_Minutes);
    RTC_TimeStruct->RTC_Seconds = (uint8_t)RTC_Bcd2ToByte(RTC_TimeStruct->RTC_Seconds);   
  }
}
nakil
4楼-- · 2019-07-20 17:04
 精彩回答 2  元偷偷看……
nakil
5楼-- · 2019-07-20 22:48
从RTC->TR读出来的值0x00640000,小时对应的是64
nakil
6楼-- · 2019-07-20 22:52
nakil 发表于 2016-9-12 15:09
从RTC->TR读出来的值0x00640000,小时对应的是64

PM对应的是1,小时对应的是24,这个值对吗?

一周热门 更多>