1问题
板子再次恢复电源时直接初始化了时间
2解决思路
在初始化函数(MX_RTC_Init();)中增加判断,判断是否是二次初始化
将值放入备份存储其中
3问题图
4解决后的源码
cpp
/* RTC init function */
void MX_RTC_Init(void)
{
/* USER CODE BEGIN RTC_Init 0 */
/* USER CODE END RTC_Init 0 */
RTC_TimeTypeDef sTime = {0};
RTC_DateTypeDef DateToUpdate = {0};
/* USER CODE BEGIN RTC_Init 1 */
/* USER CODE END RTC_Init 1 */
/** 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();
}
/* USER CODE BEGIN Check_RTC_BKUP */
if(HAL_RTCEx_BKUPRead(&hrtc,RTC_BKP_DR1)!=0xA0A0) //这里就是在检查寄存器是不是预先设定的值,如果不是,就按照STM32CubeMX默认的设置往下走。这个值是任意定的
{
/* USER CODE END Check_RTC_BKUP */
/** Initialize RTC and set the Time and Date
*/
sTime.Hours = 0x19;
sTime.Minutes = 0x43;
sTime.Seconds = 0x0;
if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BCD) != HAL_OK)
{
Error_Handler();
}
DateToUpdate.WeekDay = RTC_WEEKDAY_WEDNESDAY;
DateToUpdate.Month = RTC_MONTH_MAY;
DateToUpdate.Date = 0x8;
DateToUpdate.Year = 0x24;
if (HAL_RTC_SetDate(&hrtc, &DateToUpdate, RTC_FORMAT_BCD) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN RTC_Init 2 */
HAL_RTCEx_BKUPWrite(&hrtc, RTC_BKP_DR1, 0xA0A0); //这里就是将这个寄存器的标志设为刚才的那个值,下次掉电后就不会进入到这里来了
}//判断为是第二次初始化时会退出初始化时间
/* USER CODE END RTC_Init 2 */
}