Skip to main content
Visitor II
September 20, 2024
Question

RTC problem

  • September 20, 2024
  • 2 replies
  • 1214 views

Hello

 

I have RTC problem using LSI clock.

 

This issue don't work RTC.

I see that SSR is change. but don't change TR.

 

But When IAR debug configure, RTC is working.

 

 

My MCU is STM32F429

My Config code is blew

Could you find a wrong initialize code?

 

void SystemClock_Config(void)
{
  RCC_OscInitTypeDef RCC_OscInitStruct = {0,};
  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0,};
  RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0,};

  /** Configure the main internal regulator output voltage
   */
  __HAL_RCC_PWR_CLK_ENABLE();
  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
  /** Initializes the RCC Oscillators according to the specified parameters
   * in the RCC_OscInitTypeDef structure.
   */
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI | RCC_OSCILLATORTYPE_HSE;
  RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  RCC_OscInitStruct.LSIState = RCC_LSI_ON;
  RCC_OscInitStruct.LSEState = RCC_LSE_OFF;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  RCC_OscInitStruct.PLL.PLLM = 25;
  RCC_OscInitStruct.PLL.PLLN = 336;
  RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
  RCC_OscInitStruct.PLL.PLLQ = 7;
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  {
    Error_Handler();
  }
  /** Initializes the CPU, AHB and APB buses clocks
  */
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                              |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;

  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK)
  {
    Error_Handler();
  }

  // waiting for LSI clk ready
  __HAL_RCC_LSI_ENABLE();
  while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) == RESET)
  {
  }

  // set LSI clk to RTC clk
  PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RTC;
  PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSI;
  if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) {
      Error_Handler();
  }

  // RTC clk enable
  __HAL_RCC_RTC_ENABLE();
 
}
 
void DI_RTC_Init(void)
{
  RTC_TimeTypeDef sTime = {0};
  RTC_DateTypeDef sDate = {0};


  hrtc.Instance = RTC;
  hrtc.Init.HourFormat = RTC_HOURFORMAT_24;
  hrtc.Init.AsynchPrediv = 127; // LSI
  hrtc.Init.SynchPrediv = 249;  // LSI
 
  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();
  }

  if(HAL_RTC_Init(&hrtc) != HAL_OK)
  {
    /* Initialization Error */
    Error_Handler();
  }

  sTime.Hours = 0x0;
  sTime.Minutes = 0x0;
  sTime.Seconds = 0x0;
  sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
  sTime.StoreOperation = RTC_STOREOPERATION_RESET;
  HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BIN);

  sDate.WeekDay = RTC_WEEKDAY_MONDAY;
  sDate.Month = RTC_MONTH_JANUARY;
  sDate.Date = 0x1;
  sDate.Year = 0x0;
  HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BIN);
}
 
 

 

    This topic has been closed for replies.

    2 replies

    Super User
    September 20, 2024

    How do you observe the RTC registers?

    Note, that after reading out TR you have to read out DR too.

    JW

    power_suAuthor
    Visitor II
    September 22, 2024

    hello  waclawek.jan

     

    When I read the RTC time using the HAL_RTC_GetTime function,

    the RTC was not read, so I confirmed that it was operating normally

    when I entered iar jtag debug mode.

     

    However, it was confirmed that when not in jtag mode,

    TR does not change and only SSR changes.

    This was confirmed through uart that only SSR changes by directly reading the register.

     

    Are there any problems with the RTC initialization code?

    Can't I use the HAL_RTC_Get function?

    Super User
    September 23, 2024

    After HAL_RTC_GetTime() use HAL_RTC_GetDate().

    JW

    power_suAuthor
    Visitor II
    September 24, 2024

    Thank you.

    RTC working!!!