cancel
Showing results for 
Search instead for 
Did you mean: 

Unable to wake up STM32F471 from standby mode using the wake up pins.

jack_874
Associate

Hi all,

I am unable to wake up my mcu from standby mode using any of the wake up pins. Below is my code. Any help is appreciated.

Thanks. :grinning_face_with_sweat:

/* Private function prototypes -----------------------------------------------*/
 
void MX_GPIO_DeInit(void) {
 
  __HAL_RCC_GPIOA_CLK_DISABLE();
 
  __HAL_RCC_GPIOB_CLK_DISABLE();
 
//  HAL_RCC_DeInit();
 
}
 
 
 
void StandbyMode(void) {
 
 MX_GPIO_DeInit();
 
 /* This procedure come from the STM32F030 Errata sheet*/  
 
 __HAL_RCC_PWR_CLK_ENABLE();
 
HAL_PWR_DisableWakeUpPin(PWR_WAKEUP_PIN5);
 
 /* Clear PWR wake up Flag */
 
__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);
 
 /* Enable WKUP pin */
 
HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN5);
 
 /* Enter STANDBY mode */ 
 
HAL_PWR_EnterSTANDBYMode();
 
}
 
 
 
int main(void)
 
{  
 
 /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
 
 HAL_Init();
 
 /* Configure the system clock */
 
 SystemClock_Config();
 
  
 
 /* USER CODE BEGIN SysInit */
 
 /* Enable Power Clock */
 
 __HAL_RCC_PWR_CLK_ENABLE();
 
  
 
 /* USER CODE END SysInit */
 
  
 
 /* Initialize all configured peripherals */
 
 MX_GPIO_Init();
 
 }  
 
  
 
 /* USER CODE END 2 */
 
  
 
 /* Infinite loop */
 
 /* USER CODE BEGIN WHILE */
 
 if (__HAL_PWR_GET_FLAG(PWR_FLAG_WUF1) != RESET)
 
 {
 
  /* Clear Standby flag */
 
  __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WUF1);
 
  while(1){
 
   HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_1);
 
   HAL_Delay(10);
 
  }
 
 }  
 
  
 
/* Check if the system was resumed from Standby mode */ 
 
 if (__HAL_PWR_GET_FLAG(PWR_FLAG_SB) != RESET)
 
 {
 
  /* Clear Standby flag */
 
  __HAL_PWR_CLEAR_FLAG(PWR_FLAG_SB);
 
  while(1){
 
   HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_1);
 
   HAL_Delay(1);
 
  }
 
 }
 
  
 
  
 
 while (1)
 
 {
 
  HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_1);
 
  HAL_Delay(10);
 
  HAL_Delay(1000);
 
  StandbyMode();
 
 }  
 
}
 
 
 
 
 
/**
 
* @brief System Clock Configuration
 
* @retval None
 
*/
 
void SystemClock_Config(void)
 
{
 
  
 
 RCC_OscInitTypeDef RCC_OscInitStruct;
 
 RCC_ClkInitTypeDef RCC_ClkInitStruct;
 
 RCC_PeriphCLKInitTypeDef PeriphClkInit;
 
  
 
 /**Initializes the CPU, AHB and APB busses clocks 
 
 */
 
 RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
 
 RCC_OscInitStruct.HSIState = RCC_HSI_ON;
 
 RCC_OscInitStruct.HSICalibrationValue = 16;
 
 RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
 
 RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
 
 RCC_OscInitStruct.PLL.PLLM = 1;
 
 RCC_OscInitStruct.PLL.PLLN = 10;
 
 RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV7;
 
 RCC_OscInitStruct.PLL.PLLQ = RCC_PLLQ_DIV2;
 
 RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV2;
 
 if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
 
 {
 
  _Error_Handler(__FILE__, __LINE__);
 
 }
 
  
 
 /**Initializes the CPU, AHB and APB busses 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_DIV1;
 
 RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
 
  
 
 if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4) != HAL_OK)
 
 {
 
  _Error_Handler(__FILE__, __LINE__);
 
 }
 
  
 
 PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_I2C1;
 
 PeriphClkInit.I2c1ClockSelection = RCC_I2C1CLKSOURCE_HSI;
 
 if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
 
 {
 
  _Error_Handler(__FILE__, __LINE__);
 
 }
 
  
 
 /**Configure the main internal regulator output voltage 
 
 */
 
 if (HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1) != HAL_OK)
 
 {
 
  _Error_Handler(__FILE__, __LINE__);
 
 }
 
  
 
 /**Configure the Systick interrupt time 
 
 */
 
 HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);
 
  
 
 /**Configure the Systick 
 
 */
 
 HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
 
  
 
 /* SysTick_IRQn interrupt configuration */
 
 HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
 
}

0 REPLIES 0