于是代码修改如下:
//RTC部分
void RTC_Init( )
{
RCC_OscInitTypeDef RCC_OscInitStruct;
RCC_PeriphCLKInitTypeDef PeriphClkInitStruct;
RTC_TamperTypeDef stamperstructure;
/* Set Voltage scale1 as MCU will run at 32MHz */
__HAL_RCC_PWR_CLK_ENABLE();
__HAL_RCC_RTC_ENABLE();
/*这里并不是每次上电都要初始化RTC,根据第0个备份寄存器的数组决定。因为在不断复位启动执行吃时候RTC,
RTC的时间将会变慢,大概一次复位将会慢半秒到一秒,这个真的可怕啊!我的项目应用是需要在stop模式下唤
醒并复位,相当于不断时间变成一半,这个问题搞了我快两天的工作时间,真是HAL的坑啊!20201204*/
RtcHandle.TampOffset = (TAMP_BASE - RTC_BASE);//一定加这句,不然在不初始化HAL_RTC_Init()的时候,执行HAL_RTCEx_BKUPRead(&RtcHandle,RTC_BKP_DR0)读取不成功且为0
RtcHandle.Instance = RTC;
if(HAL_RTCEx_BKUPRead(&RtcHandle,RTC_BKP_DR0)!=0X6050)//是否第一次配置
{
RtcHandle.Init.HourFormat = RTC_HOURFORMAT_24;
RtcHandle.Init.AsynchPrediv = RTC_ASYNCH_PREDIV;
RtcHandle.Init.SynchPrediv = RTC_SYNCH_PREDIV;
RtcHandle.Init.OutPut = RTC_OUTPUT_DISABLE;
RtcHandle.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
RtcHandle.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
if (HAL_RTC_Init(&RtcHandle) != HAL_OK)
{
/* Initialization Error */
}
// if(HAL_RTCEx_BKUPRead(&RtcHandle,RTC_BKP_DR0)!=0X6050)//是否第一次配置
// {
RTC_Set_Time(15,11,0,RTC_HOURFORMAT12_PM); //设置时间 ,根据实际时间修改
RTC_Set_Date(19,12,17,2); //设置日期
HAL_RTCEx_BKUPWrite(&RtcHandle,RTC_BKP_DR0,0X6050);//标记已经初始化过了
}
}
|