STM32的RTC设置年份不正确的问题

STM32 RTC设置日期后再读出来,发现年总是不对,月和日都是对的。
查看HAL库的RTC中Date设置代码:

  sDate.WeekDay = RTC_WEEKDAY_WEDNESDAY;
  sDate.Month = RTC_MONTH_NOVEMBER;
  sDate.Date = 17;
  sDate.Year = 21;

  if (HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BIN) != HAL_OK)
  {
    Error_Handler();
  }

从代码中可以看出WeekDay、 Month 、Date 、Year 变量都进行了赋值。
但是之前的项目没有设置WeekDay数据年份也没有出错,查找之前的项目中关于时间设置的代码,发现是现将RTC中的Date结构体读出来,在此基础上修改

status = HAL_RTC_GetDate(&hrtc,&gDate,RTC_FORMAT_BIN);//先获取到日期、再进行修改
/*
...
对日期进行修改的程序
...
*/
HAL_RTC_SetDate(&hrtc,&sDate,RTC_FORMAT_BIN);//设置日期

在stm32g0xx_hal_rtc.h中RTC_WeekDay默认数值为1-7的数值

/**
  * @}
  */

/** @defgroup RTC_WeekDay_Definitions RTC WeekDay Definitions
  * @{
  */
#define RTC_WEEKDAY_MONDAY                  ((uint8_t)0x01U)
#define RTC_WEEKDAY_TUESDAY                 ((uint8_t)0x02U)
#define RTC_WEEKDAY_WEDNESDAY               ((uint8_t)0x03U)
#define RTC_WEEKDAY_THURSDAY                ((uint8_t)0x04U)
#define RTC_WEEKDAY_FRIDAY                  ((uint8_t)0x05U)
#define RTC_WEEKDAY_SATURDAY                ((uint8_t)0x06U)
#define RTC_WEEKDAY_SUNDAY                  ((uint8_t)0x07U)

/**
  * @}
  */

本次项目是初始化date结构体变量,这个时候WeekDay的默认值应该是0,如果不赋值1-7的值,那么设置的WeekDay就是0,会出现年份设置不对的情况。
WeekDay数据设置的正确与否,不影响时间,也就是说随便赋值一个1-7的数值,就不会影响年份的设置。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值