STM32L073 RTC时钟初始化问题

STM32L073的RTC时钟怎么也初始化不了

    while((hrtc->Instance->ISR & RTC_ISR_INITF) == (uint32_t)RESET)

    {

      if((HAL_GetTick()  - tickstart ) > RTC_TIMEOUT_VALUE)

      {

        return HAL_TIMEOUT;

      }

    }总在这里超时,一点办法也没有


已邀请:

物语

赞同来自:

函数原型在这里

HAL_StatusTypeDef RTC_EnterInitMode(RTC_HandleTypeDef* hrtc)

{

  uint32_t tickstart = 0U;


  /* Check if the Initialization mode is set */

  if((hrtc->Instance->ISR & RTC_ISR_INITF) == (uint32_t)RESET)

  {

    /* Set the Initialization mode */

    hrtc->Instance->ISR = (uint32_t)RTC_INIT_MASK;


    tickstart = HAL_GetTick();

    /* Wait till RTC is in INIT state and if Time out is reached exit */

    while((hrtc->Instance->ISR & RTC_ISR_INITF) == (uint32_t)RESET)

    {

      if((HAL_GetTick()  - tickstart ) > RTC_TIMEOUT_VALUE)

      {

        return HAL_TIMEOUT;

      }

    }

  }


  return HAL_OK;

}


物语

赞同来自:

blob.pngcube的设置是这样的

物语

赞同来自:

求高人指点

yangpengya

赞同来自: 缺月疏桐

/**
  * @brief  Enter the RTC Initialization mode.
  * @note   The RTC Initialization mode is write protected, use the
  *         __HAL_RTC_WRITEPROTECTION_DISABLE() before calling this function.
  * @param  hrtc: RTC handle
  * @retval HAL status
  */
HAL_StatusTypeDef RTC_EnterInitMode(RTC_HandleTypeDef* hrtc)

有没有调用这个

__HAL_RTC_WRITEPROTECTION_DISABLE();


缺月疏桐

赞同来自:

我也遇到了一样的问题,不知道楼主问题解决了没有?怎么解决的?

冷雨

赞同来自:

同问,请问下如何解决的 谢谢

cn016994291 - 90后IT男

赞同来自:

请问怎么解决的,这个问题也同样遇到了

单片机爱好者

赞同来自:

遇到相同问题,内部LSI作为RTC 时钟。。。。偶尔可以正常,大部分不能启动。。

长青竹子

赞同来自:

遇到同样的问题,请问怎么解决?

长青竹子

赞同来自:

void HAL_RTC_MspInit(RTC_HandleTypeDef *hrtc)
需要在此函数中添加RTC时钟启动函数,

  RCC_OscInitTypeDef       RCC_OscInitStruct;

RCC_PeriphCLKInitTypeDef  PeriphClkInitStruct;

  __HAL_RCC_PWR_CLK_ENABLE();

HAL_PWR_EnableBkUpAccess();

RCC_OscInitStruct.OscillatorType =  RCC_OSCILLATORTYPE_LSI | RCC_OSCILLATORTYPE_LSE;

RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;

RCC_OscInitStruct.LSIState = RCC_LSI_ON;

RCC_OscInitStruct.LSEState = RCC_LSE_OFF;

if(HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)

  { 

    Error_Handler();

  }

PeriphClkInitStruct.PeriphClockSelection= RCC_PERIPHCLK_RTC;

PeriphClkInitStruct.RTCClockSelection =RCC_RTCCLKSOURCE_LSI;

  if(HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)

  { 

    Error_Handler();

  }

__HAL_RCC_RTC_ENABLE(); 

 HAL_NVIC_SetPriority(RTC_IRQn, 0x0F, 0)

HAL_NVIC_EnableIRQ(RTC_IRQn);



void HAL_RTC_MspDeInit(RTC_HandleTypeDef *hrtc)

{

  /*##-1- Reset peripherals #########

   __HAL_RCC_RTC_DISABLE();

}

补充完这两个函数即可;

使用 f0xx hal 库

我最美

赞同来自:

遇到同样的问题,请问怎么解决?

奥丁泰尔

赞同来自:

RTC的时钟问题,一开始选择LSE,总是失败,后来选择LSI 成功。

要回复问题请先登录注册