Skip to main content
chrisPyres66
Associate III
January 17, 2019
Solved

wake up with rtc from standby mode does not work anymore after having gone in uder drive stop mode

  • January 17, 2019
  • 1 reply
  • 977 views

The code works if i enter in stop mode but not if i enter in under drive mode.

I think i have to reinit something after stop mode but i dont find what.

Here is the code :

int main(void)
{
 HAL_Init();
 SystemClock_Config();
 MX_GPIO_Init();
 MX_ADC1_Init();
 MX_RTC_Init();
 while (1)
 {
	 HAL_GPIO_WritePin(GPIOB, LED_Pin, GPIO_PIN_RESET);
 
	 if (HAL_RTCEx_SetWakeUpTimer_IT(&hrtc, 500, RTC_WAKEUPCLOCK_RTCCLK_DIV16) != HAL_OK)
	 {
	 Error_Handler();
	 }
 
	 	HAL_SuspendTick();
		HAL_PWREx_EnterUnderDriveSTOPMode(PWR_LOWPOWERREGULATOR_UNDERDRIVE_ON, PWR_STOPENTRY_WFI); // -200uA
		//HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI); // 0.450mA
 
	 HAL_RTCEx_DeactivateWakeUpTimer(&hrtc);
 
	 SYSCLKConfig_STOP();
 
	 HAL_ResumeTick();
 
	 if (HAL_RTCEx_SetWakeUpTimer_IT(&hrtc, 500, RTC_WAKEUPCLOCK_RTCCLK_DIV16) != HAL_OK)
	 {
	 Error_Handler();
	 }
 
	 HAL_PWR_EnterSTANDBYMode();
 }
}
 
void SystemClock_Config(void)
{
 RCC_OscInitTypeDef RCC_OscInitStruct = {0};
 RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
 RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
 
 __HAL_RCC_PWR_CLK_ENABLE();
 __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE3);
 
 RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI|RCC_OSCILLATORTYPE_LSI;
 RCC_OscInitStruct.HSIState = RCC_HSI_ON;
 RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
 RCC_OscInitStruct.LSIState = RCC_LSI_ON;
 RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
 if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
 {
 Error_Handler();
 }
 
 RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
 |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
 RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
 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_0) != HAL_OK)
 {
 Error_Handler();
 }
 PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RTC;
 PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSI;
 if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
 {
 Error_Handler();
 }
}
 
void SYSCLKConfig_STOP(void)
{
 RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
 RCC_OscInitTypeDef RCC_OscInitStruct = {0};
 uint32_t pFLatency = 0;
 
 __HAL_RCC_PWR_CLK_ENABLE();
 __HAL_RCC_SYSCFG_CLK_ENABLE();
 
 HAL_RCC_GetOscConfig(&RCC_OscInitStruct);
 RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI|RCC_OSCILLATORTYPE_LSI;
 RCC_OscInitStruct.HSIState = RCC_HSI_ON;
 RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
 if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
 {
 Error_Handler();
 }
 
 HAL_RCC_GetClockConfig(&RCC_ClkInitStruct, &pFLatency);
 
 RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK;
 RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
 if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, pFLatency) != HAL_OK)
 {
 Error_Handler();
 }
}

Thanks for your help

This topic has been closed for replies.
Best answer by chrisPyres66

Hello all,

There is a bug in

HAL_PWREx_EnterUnderDriveSTOPMode(PWR_LOWPOWERREGULATOR_UNDERDRIVE_ON, PWR_STOPENTRY_WFI);

which manipulate the URDY Flag.

It works with underdrive current if you use in place of :

__HAL_PWR_UNDERDRIVE_ENABLE();

HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_UNDERDRIVE_ON, PWR_STOPENTRY_WFI);

Perhaps ST can give information about this ?

Thanks,

Thanks,

1 reply

chrisPyres66
chrisPyres66AuthorBest answer
Associate III
January 24, 2019

Hello all,

There is a bug in

HAL_PWREx_EnterUnderDriveSTOPMode(PWR_LOWPOWERREGULATOR_UNDERDRIVE_ON, PWR_STOPENTRY_WFI);

which manipulate the URDY Flag.

It works with underdrive current if you use in place of :

__HAL_PWR_UNDERDRIVE_ENABLE();

HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_UNDERDRIVE_ON, PWR_STOPENTRY_WFI);

Perhaps ST can give information about this ?

Thanks,

Thanks,