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的数值,就不会影响年份的设置。