Shutdown Mode in stm32u083rc
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
2025-02-25 9:51 PM
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_USART2_UART_Init();
/* USER CODE BEGIN 2 */
// logMessageUART(LOG_LEVEL_INFO, "STOP Mode Test \r \n");
if (__HAL_RCC_GET_FLAG(RCC_FLAG_SFTRST))
{
LOG_INFO_UART("Wakeup from Software Reset!");
}
else if (__HAL_RCC_GET_FLAG(RCC_FLAG_PWRRST))
{
LOG_INFO_UART("Wakeup from Shutdown Mode!");
}
else if (__HAL_PWR_GET_FLAG(PWR_FLAG_WUF1))
{
LOG_INFO_UART("Wakeup from PA0!");
}
else if (__HAL_PWR_GET_FLAG(PWR_FLAG_WUF2))
{
LOG_INFO_UART("Wakeup from PC13 Button!");
}
else if (__HAL_PWR_GET_FLAG(PWR_FLAG_WUF3))
{
LOG_INFO_UART("Wakeup from PB2!");
}
else if (__HAL_PWR_GET_FLAG(PWR_FLAG_WUF4))
{
LOG_INFO_UART("Wakeup from RTC Wakeup!");
}
else
{
LOG_INFO_UART("Power-On Reset (Cold Boot)!");
}
// ? Clear Reset Flags
__HAL_RCC_CLEAR_RESET_FLAGS();
for (int i = 0; i < 20; i++ )
{
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);
HAL_Delay(200);
}
//stop2_test();
__HAL_RCC_PWR_CLK_ENABLE();
// // ? Configure RTC Wakeup Timer (5-second wakeup)
// HAL_RTCEx_SetWakeUpTimer_IT(&hrtc, 20480, RTC_WAKEUPCLOCK_RTCCLK_DIV16, 20480);
// __HAL_RCC_GPIOA_CLK_ENABLE();
// GPIO_InitTypeDef GPIO_InitStruct = {0};
// GPIO_InitStruct.Pin = GPIO_PIN_0;
// GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
// GPIO_InitStruct.Pull = GPIO_PULLDOWN;
// GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
// HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
// ? Enable RTC Wakeup as a Wakeup Source
HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1_LOW); // RTC Wakeup (Internal)
// ? Disable Other Wakeup Pins (Only Use RTC)
// HAL_PWR_DisableWakeUpPin(PWR_WAKEUP_PIN1);
HAL_PWR_DisableWakeUpPin(PWR_WAKEUP_PIN2);
HAL_PWR_DisableWakeUpPin(PWR_WAKEUP_PIN3);
HAL_PWR_DisableWakeUpPin(PWR_WAKEUP_PIN4);
// ? Log Message Before Shutdown
LOG_INFO_UART("Entering Shutdown Mode...");
// __HAL_RCC_GPIOA_CLK_DISABLE();
__HAL_RCC_GPIOB_CLK_DISABLE();
__HAL_RCC_GPIOC_CLK_DISABLE();
CLEAR_REG(RCC->APBENR1);
// HAL_RTC_DeactivateAlarm(&hrtc, RTC_ALARM_A);
// HAL_RTC_DeactivateAlarm(&hrtc, RTC_ALARM_B);
// HAL_RTCEx_DeactivateTamper(&hrtc, RTC_TAMPER_1);
__HAL_RCC_HSE_CONFIG(RCC_HSE_OFF);
__HAL_RCC_HSI_DISABLE();
__HAL_RCC_MSI_DISABLE();
HAL_RCCEx_DisableLSECSS(); // Disable LSE clock security system
// HAL_RTCEx_DeactivateCalibrationOutPut(&hrtc);
// ? Clear All Wakeup Flags (Prevents Immediate Wakeup)
__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WUF1);
__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WUF2);
__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WUF3);
__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WUF4); // RTC Wakeup Flag
if (__HAL_PWR_GET_FLAG(PWR_FLAG_WUF1))
{
LOG_INFO_UART("Wakeup 1 flag is SET");
}
HAL_UART_DeInit(&huart2);
// HAL_RTC_DeInit(&hrtc);
HAL_DBGMCU_DisableDBGStopMode();
HAL_DBGMCU_DisableDBGStandbyMode();
// HAL_DBGMCU_DisableDBGSleepMode();
DBGMCU->CR = 0x00000000;
__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WUF1);
HAL_PWR_EnterSHUTDOWNMode();
// ? This should never execute (MCU should reset on wakeup)
LOG_INFO_UART("ERROR: MCU Did NOT Shutdown!");
Labels:
1 REPLY 1
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
2025-03-06 2:14 AM
Hello @Sumukha,
This is the correct order to follow:
- Enable Power Control Clock: __HAL_RCC_PWR_CLK_ENABLE();
- Configure Wakeup Pin: HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1_LOW);
- Clear Wakeup Flags: __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WUF1); and other flags.
- Enter Shutdown Mode: HAL_PWR_EnterSHUTDOWNMode();
To give better visibility on the answered topics, please click on Accept as Solution on the reply which solved your issue or answered your question.
