金牌会员
 
- 积分
- 1194
- 金钱
- 1194
- 注册时间
- 2017-8-31
- 在线时间
- 295 小时
|
10金钱
如题,听说以后hal库是主流,于是想用stm32f103c8t6的板子学习一下,结果在RTC这块用cubemx生成hal库的工程,在又一次下载程序或复位后RTC时间不对,年月日为00-01-01,时分秒正常
网上找了一下,也有类似问题出现,但没找到解决方法,所以想问一下到底是什么问题导致这种情况出现。
[mw_shl_code=c,true]//cubemx生成的RTC配置,时钟配置在别处未包含进来
void MX_RTC_Init(void)
{
RTC_TimeTypeDef sTime;
RTC_DateTypeDef DateToUpdate;
/**Initialize RTC Only
*/
hrtc.Instance = RTC;
hrtc.Init.AsynchPrediv = RTC_AUTO_1_SECOND;
hrtc.Init.OutPut = RTC_OUTPUTSOURCE_ALARM;
if (HAL_RTC_Init(&hrtc) != HAL_OK)
{
Error_Handler();
}
/**Initialize RTC and set the Time and Date
*/
if(HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DR1) != 0x32F2){
sTime.Hours = 0x11;
sTime.Minutes = 0x19;
sTime.Seconds = 0x2;
if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BCD) != HAL_OK)
{
Error_Handler();
}
DateToUpdate.WeekDay = RTC_WEEKDAY_TUESDAY;
DateToUpdate.Month = RTC_MONTH_DECEMBER;
DateToUpdate.Date = 0x12;
DateToUpdate.Year = 0x17;
if (HAL_RTC_SetDate(&hrtc, &DateToUpdate, RTC_FORMAT_BCD) != HAL_OK)
{
Error_Handler();
}
HAL_RTCEx_BKUPWrite(&hrtc,RTC_BKP_DR1,0x32F2);
}
}
//自己写的读RTC时间值并打印的程序
void RTC_Check()
{
uint8_t time[6];
RTC_TimeTypeDef sTime;
RTC_DateTypeDef DateToUpdate;
HAL_RTC_GetTime(&hrtc, &sTime, RTC_FORMAT_BCD);
time[3]=sTime.Hours;
time[4]=sTime.Minutes;
time[5]=sTime.Seconds;
HAL_RTC_GetDate(&hrtc, &DateToUpdate, RTC_FORMAT_BCD);
time[0]=DateToUpdate.Year;
time[1]=DateToUpdate.Month;
time[2]=DateToUpdate.Date;
printf("Time:%02X-%02X-%02X %02X:%02X:%02X\r\n",time[0],time[1],time[2],time[3],time[4],time[5]);
}[/mw_shl_code]
ps.我用标准库程序时间都很正常,不知道为什么hal库的年月日就保存不了,但调试发现BKP寄存器0x32F2有写入值的
求知道原因的大大告诉我
|
最佳答案
查看完整内容[请看2#楼]
stm32F1的hal库,RTC设置时间函数HAL_RTC_GetDate不会将日期转换成计数值存进计数器,反而会读计数器值将值减小到时分秒的范围,不保存年月日,也不知道ST出于什么原因考虑这样设置,32位计数器能计数100多年却只用来保存时分秒
|