找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2064|回復(fù): 6
打印 上一主題 下一主題
收起左側(cè)

STM32L051單片機(jī)系統(tǒng)復(fù)位時正常,斷電會導(dǎo)致RTC復(fù)位,這是為什么

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:71233 發(fā)表于 2023-3-5 10:40 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
用STM32L051的RTC模塊,按下系統(tǒng)復(fù)位鍵時,RTC時間正常,但當(dāng)斷電后再通電時,RTC被復(fù)位,時分秒均被清零。STM32L051的1腳有外接3V電池,且電壓正常。MX_RTC_Init代碼中的時間初始化設(shè)置有注釋掉。
用STM32CubeMX配的代碼(HAL庫),RTC.c代碼如下:
#include "rtc.h"
RTC_HandleTypeDef hrtc;
void MX_RTC_Init(void)
{
  //RTC_TimeTypeDef sTime = {0};
  //RTC_DateTypeDef sDate = {0};
  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.OutPutRemap = RTC_OUTPUT_REMAP_NONE;
  hrtc.Init.OutPutPolarity =RTC_OUTPUT_POLARITY_HIGH;
  hrtc.Init.OutPutType =RTC_OUTPUT_TYPE_OPENDRAIN;
  if (HAL_RTC_Init(&hrtc) !=HAL_OK)
  {
    Error_Handler();
  }
  /*
  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_WEDNESDAY;
  sDate.Month = RTC_MONTH_MARCH;
  sDate.Date = 0x1;
  sDate.Year = 0x23;
  if (HAL_RTC_SetDate(&hrtc,&sDate, RTC_FORMAT_BCD) != HAL_OK)
  {
    Error_Handler();
  }
      */
}
void HAL_RTC_MspInit(RTC_HandleTypeDef*rtcHandle)
{
  if(rtcHandle->Instance==RTC)
  {
    __HAL_RCC_RTC_ENABLE();
  }
}
void HAL_RTC_MspDeInit(RTC_HandleTypeDef*rtcHandle)
{
  if(rtcHandle->Instance==RTC)
  {
    __HAL_RCC_RTC_DISABLE();
  }
}
請大佬分析一下,哪個環(huán)節(jié)出問題了?該如何解決?
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:1034262 發(fā)表于 2023-3-5 13:21 | 只看該作者
是不是復(fù)位時,寄存器也復(fù)位了。
回復(fù)

使用道具 舉報

板凳
ID:883242 發(fā)表于 2023-3-5 14:03 | 只看該作者
不要執(zhí)行MX_RTC_Init()函數(shù),一旦執(zhí)行了就是你現(xiàn)在的醬紫。
回復(fù)

使用道具 舉報

地板
ID:71233 發(fā)表于 2023-3-5 21:19 | 只看該作者
Hephaestus 發(fā)表于 2023-3-5 14:03
不要執(zhí)行MX_RTC_Init()函數(shù),一旦執(zhí)行了就是你現(xiàn)在的醬紫。

沒有執(zhí)行的話,無法讀取RTC時間。
回復(fù)

使用道具 舉報

5#
ID:71233 發(fā)表于 2023-3-5 21:19 | 只看該作者
coody_sz 發(fā)表于 2023-3-5 13:21
是不是復(fù)位時,寄存器也復(fù)位了。

系統(tǒng)復(fù)位的話,沒有問題。
回復(fù)

使用道具 舉報

6#
ID:71233 發(fā)表于 2023-4-4 09:53 | 只看該作者
Hephaestus 發(fā)表于 2023-3-5 14:03
不要執(zhí)行MX_RTC_Init()函數(shù),一旦執(zhí)行了就是你現(xiàn)在的醬紫。

其中的初始化時間(時間設(shè)置)有注釋掉,也就是說每次系統(tǒng)開始就作簡單的RTC設(shè)置,不寫入任何時間數(shù)據(jù)。
回復(fù)

使用道具 舉報

7#
ID:71233 發(fā)表于 2023-4-4 09:54 | 只看該作者
如果連HAL_RTC_Init(&hrtc)也不執(zhí)行的話,后續(xù)就無法讀取RTC時間數(shù)據(jù)。
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表