2025-03-15 2:42 AM - last edited on 2025-03-18 4:44 AM by mƎALLEm
I've designed a custom board using the STM32H747I MCU, following the STM32H747I-DISCO reference design. In my design, I've connected VLXSMPS to VDDLDO, similar to the reference design.
I'm currently setting up the power configuration in STM32CubeIDE and need clarification on the correct HAL_PWREx_ConfigSupply() parameter to use. My options seem to be:
#define PWR_DIRECT_SMPS_SUPPLY PWR_CR3_SMPSEN /*!< Core domains are supplied from the SMPS only */
#define PWR_SMPS_1V8_SUPPLIES_LDO (PWR_CR3_SMPSLEVEL_0 | PWR_CR3_SMPSEN | PWR_CR3_LDOEN) /*!< The SMPS 1.8V output supplies the LDO which supplies the Core domains */
#define PWR_SMPS_2V5_SUPPLIES_LDO (PWR_CR3_SMPSLEVEL_1 | PWR_CR3_SMPSEN | PWR_CR3_LDOEN) /*!< The SMPS 2.5V output supplies the LDO which supplies the Core domains */
#define PWR_SMPS_1V8_SUPPLIES_EXT_AND_LDO (PWR_CR3_SMPSLEVEL_0 | PWR_CR3_SMPSEXTHP | PWR_CR3_SMPSEN | PWR_CR3_LDOEN) /*!< The SMPS 1.8V output supplies an external circuits and the LDO. The Core domains are supplied from the LDO */
#define PWR_SMPS_2V5_SUPPLIES_EXT_AND_LDO (PWR_CR3_SMPSLEVEL_1 | PWR_CR3_SMPSEXTHP | PWR_CR3_SMPSEN | PWR_CR3_LDOEN) /*!< The SMPS 2.5V output supplies an external circuits and the LDO. The Core domains are supplied from the LDO */
#define PWR_SMPS_1V8_SUPPLIES_EXT (PWR_CR3_SMPSLEVEL_0 | PWR_CR3_SMPSEXTHP | PWR_CR3_SMPSEN | PWR_CR3_BYPASS) /*!< The SMPS 1.8V output supplies an external source which supplies the Core domains */
#define PWR_SMPS_2V5_SUPPLIES_EXT (PWR_CR3_SMPSLEVEL_1 | PWR_CR3_SMPSEXTHP | PWR_CR3_SMPSEN | PWR_CR3_BYPASS) /*!< The SMPS 2.5V output supplies an external source which supplies the Core domains */
#endif /* defined (SMPS) */
#define PWR_EXTERNAL_SOURCE_SUPPLY PWR_CR3_BYPASS /*!< The SMPS disabled and the LDO Bypass. The Core domains are supplied from an external source */
Which is the correct configuration for a board based on the STM32H747I-DISCO reference design, also for my custom board?
Solved! Go to Solution.
2025-03-18 5:20 AM - edited 2025-03-18 5:21 AM
Thank you for the sharing.
Indeed, because you set the system clock to 480MHz / VOS0:
As I said before: "and Voltage scale 1@ 400MHz maximum."
From the datasheet VOS0 is available only with LDO configuration:
and with SMPS you cannot exceed 400MHz with VOS1.
So CubeMx doesn't allow you to set the SMPS.
Set the System clock to 400MHz and the direct SMPS option will become available:
Hope that answers your question.
2025-03-17 4:55 AM
++
2025-03-18 4:11 AM
Hello,
STM32H747I-DISCO is in SMPS configuration.
Since you are using STM32CubeIDE, you need to set it to:
and Voltage scale 1@ 400MHz maximum.
In the project preprocessor, you need to see that definition:
Which implies in the system_stm32h7xx.c, to see that block is active:
#elif defined(USE_PWR_DIRECT_SMPS_SUPPLY) && defined(SMPS)
/* Exit Run* mode */
PWR->CR3 &= ~(PWR_CR3_LDOEN);
/* Wait till voltage level flag is set */
while ((PWR->CSR1 & PWR_CSR1_ACTVOSRDY) == 0U)
{}
For the SMPS hardware you need to refer to the STM32H747I-DISCO schematics.
Hope that answers your question.
2025-03-18 4:28 AM
There is no "USE_PWR_DIRECT_SMPS_SUPPLY" section, in my interface.
2025-03-18 4:44 AM
Could you please share your ioc file?
Is it a CubeMx view? Which version?
2025-03-18 5:02 AM
2025-03-18 5:20 AM - edited 2025-03-18 5:21 AM
Thank you for the sharing.
Indeed, because you set the system clock to 480MHz / VOS0:
As I said before: "and Voltage scale 1@ 400MHz maximum."
From the datasheet VOS0 is available only with LDO configuration:
and with SMPS you cannot exceed 400MHz with VOS1.
So CubeMx doesn't allow you to set the SMPS.
Set the System clock to 400MHz and the direct SMPS option will become available:
Hope that answers your question.