Skip to content

Commit a3fd1a2

Browse files
committed
feat(u0): add STM32U0xx LowPower support
Signed-off-by: Frederic Pillon <[email protected]>
1 parent 3924ac1 commit a3fd1a2

File tree

1 file changed

+13
-6
lines changed

1 file changed

+13
-6
lines changed

src/low_power.c

+13-6
Original file line numberDiff line numberDiff line change
@@ -331,7 +331,7 @@ void SystemClock_Decrease(void)
331331
}
332332
}
333333

334-
#elif defined(STM32G0xx) || defined(STM32G4xx)
334+
#elif defined(STM32G0xx) || defined(STM32G4xx) || defined(STM32U0xx)
335335
/**
336336
* @brief For STM32G0 and STM32G4
337337
* running in LowPower Sleep requires to slow down frequency to 2MHz max.
@@ -366,7 +366,7 @@ void SystemClock_Decrease(void)
366366
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK
367367
| RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;
368368
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
369-
#elif defined(STM32G0xx)
369+
#elif defined(STM32G0xx) || defined(STM32U0xx)
370370
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK
371371
| RCC_CLOCKTYPE_PCLK1;
372372
#endif
@@ -447,7 +447,8 @@ void LowPower_stop(serial_t *obj)
447447
/* Enable Ultra low power mode */
448448
HAL_PWREx_EnableUltraLowPower();
449449
#endif
450-
#if defined(PWR_CR1_ULPMEN) || defined(PWR_CR3_ULPMEN)
450+
#if defined(PWR_CR1_ULPMEN) || defined(PWR_CR3_ULPMEN) || \
451+
(defined(PWR_CR3_ENULP) && defined(STM32U0xx))
451452
/* Enable Ultra low power mode */
452453
HAL_PWREx_EnableUltraLowPowerMode();
453454
#endif
@@ -479,13 +480,15 @@ void LowPower_stop(serial_t *obj)
479480
#endif
480481
#endif
481482
/* Enter Stop mode */
482-
#if defined(UART_WKUP_SUPPORT) && (defined(PWR_CPUCR_RETDS_CD) \
483-
|| defined(PWR_CR1_LPMS_STOP2) || defined(PWR_LOWPOWERMODE_STOP2) \
484-
|| defined(LL_PWR_STOP2_MODE))
483+
#if defined(UART_WKUP_SUPPORT) && (defined(PWR_CPUCR_RETDS_CD) || \
484+
defined(LL_PWR_MODE_STOP2))
485485
if ((WakeUpUart == NULL)
486486
|| (WakeUpUart->Instance == (USART_TypeDef *)LPUART1_BASE)
487487
#ifdef LPUART2_BASE
488488
|| (WakeUpUart->Instance == (USART_TypeDef *)LPUART2_BASE)
489+
#endif
490+
#ifdef LPUART3_BASE
491+
|| (WakeUpUart->Instance == (USART_TypeDef *)LPUART3_BASE)
489492
#endif
490493
) {
491494
#if defined(PWR_CR1_RRSTP)
@@ -596,7 +599,11 @@ void LowPower_shutdown(bool isRTC)
596599
#if defined(LL_PWR_SHUTDOWN_MODE) || defined(LL_PWR_MODE_SHUTDOWN)
597600
/* LSE must be on to use shutdown mode within RTC else fallback to standby */
598601
if ((!isRTC) || (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == SET)) {
602+
#if defined(STM32U0xx)
603+
HAL_PWR_EnterSHUTDOWNMode();
604+
#else
599605
HAL_PWREx_EnterSHUTDOWNMode();
606+
#endif
600607
} else
601608
#else
602609
UNUSED(isRTC);

0 commit comments

Comments
 (0)