新手上路
- 积分
- 33
- 金钱
- 33
- 注册时间
- 2022-8-5
- 在线时间
- 6 小时
|
10金钱
求助下路过大佬,看看我这个是什么问题。STM32F429bit6芯片,使用hal库写的,包含boot程序和application程序。问题现象:上电时使用HAL_RTC_SetDate和HAL_RTC_SetTime设置了时间,之后使用get获取时间RTC时间,这个过程没有异常,但下电后我重新上电,再去获取RTC时间,时间会被重置为其他值
一开始我是boot里初始化了RTC,跳转application后也初始化了RTC,以为是两次初始化的缘故,就改成了只在boot里完整的初始化RTC,跳转到application后只初始化句柄,结果还是不行。
这是我的配置(被重置的值不是配置里的值)

下面是我boot初始化RTC的代码。在STM32cubeIDE上生成的初始化代码基础上加了一些
void MX_RTC_Init(void)
{
/* USER CODE BEGIN RTC_Init 0 */
uint16_t BkReg = 0;
/* USER CODE END RTC_Init 0 */
RTC_TimeTypeDef sTime = {0};
RTC_DateTypeDef sDate = {0};
/* USER CODE BEGIN RTC_Init 1 */
/* USER CODE END RTC_Init 1 */
/** Initialize RTC Only
*/
hrtc.Instance = RTC;
hrtc.Init.HourFormat = RTC_HOURFORMAT_24;
hrtc.Init.AsynchPrediv = 127;
hrtc.Init.SynchPrediv = 255;
hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;
hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
if (HAL_RTC_Init(&hrtc) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN Check_RTC_BKUP */
BkReg = HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DR0);
if((BkReg != 0x5050) && (BkReg != 0x5051))
{
/* USER CODE END Check_RTC_BKUP */
/** Initialize RTC and set the Time and Date
*/
sTime.Hours = 0x0;
sTime.Minutes = 0x0;
sTime.Seconds = 0x0;
sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
sTime.StoreOperation = RTC_STOREOPERATION_RESET;
if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BCD) != HAL_OK)
{
Error_Handler();
}
sDate.WeekDay = RTC_WEEKDAY_THURSDAY;
sDate.Month = RTC_MONTH_JUNE;
sDate.Date = 0x12;
sDate.Year = 0x25;
if (HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BCD) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN RTC_Init 2 */
//添加标志位,表明RTC已经完成初始化
HAL_RTCEx_BKUPWrite(&hrtc, RTC_BKP_DR0, 0x5050);
}
/* USER CODE END RTC_Init 2 */
}
|
|