2021-04-29 02:53 AM
Hello all,
I am trying to implement standby mode in stm32f7 board. The issue that I am facing is that the MCU wakes up automatically from standby mode even when I do not trigger the external wakeup pin.
Below is my code from CubeIDE. Any help will be appreciated.
In the pin configuration,I have configured 2 pins for USART, 1 pin for on-board led and 1 system wakeup pin.
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_USART1_UART_Init();
/* USER CODE BEGIN 2 */
// Enable Power clock
__HAL_RCC_PWR_CLK_ENABLE();
// Check and handle if system was resumed from standby mode
if(__HAL_PWR_GET_FLAG(PWR_FLAG_SB) != RESET) {
// Clear the SB flag
__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU|PWR_FLAG_SB);
// display wakeup string
sprintf(tx_buffer, "MCU wakes up from STANDBY mode...\n\r");
HAL_UART_Transmit(&huart1, tx_buffer, sizeof(tx_buffer), HAL_MAX_DELAY);
HAL_Delay(200);
// toggle led
for(int i=0; i<20; i++) {
HAL_GPIO_TogglePin(user_led_GPIO_Port, user_led_Pin);
HAL_Delay(200);
}
for(int j=0; j<100; j++) {
tx_buffer[j] = 0;
}
// disable wakeup pin
HAL_PWR_DisableWakeUpPin(PWR_WAKEUP_PIN6);
HAL_PWR_DisableWakeUpPin(PWR_WAKEUP_PIN_FLAG6);
}
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
// LED on
HAL_GPIO_WritePin(user_led_GPIO_Port, user_led_Pin, 1);
// display string
sprintf(tx_buffer, "MCU in RUN mode...\n\r");
HAL_UART_Transmit(&huart1, tx_buffer, sizeof(tx_buffer), HAL_MAX_DELAY);
HAL_Delay(500);
// display string
sprintf(tx_buffer, "MCU entering standby mode in 5 seconds...\n\r");
HAL_UART_Transmit(&huart1, tx_buffer, sizeof(tx_buffer), HAL_MAX_DELAY);
// LED off
HAL_GPIO_WritePin(user_led_GPIO_Port, user_led_Pin, 0);
// Clear tx buffer
for(int i=0; i<100; i++) {
tx_buffer[i] = 0;
}
// 5 seconds delay
HAL_Delay(5000);
// Enter the standby mode
// Clear the wakeup flag
__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);
// Enable wakeup pin
HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN6);
// final string before entry to standby mode
sprintf(tx_buffer, "STANDBY mode ON...\n\r");
HAL_UART_Transmit(&huart1, tx_buffer, sizeof(tx_buffer), HAL_MAX_DELAY);
HAL_Delay(200);
// standby mode function call
HAL_PWR_EnterSTANDBYMode();
}
/* USER CODE END 3 */
}
2021-04-29 06:25 AM
Read example for wakeup by RTC.
And place code to code snip
HAL_PWR_EnterSTANDBYMode();
2021-04-29 07:39 AM
Thank you very much for the reply.
I have been trying the same with RTC wakeup too but I still face a similar issue.
If you could share a tested link/thread that I can refer to, then it would be really helpful.
Thanks again.