Skip to main content
Visitor II
March 15, 2025
Solved

SMPS Configuration for STM32H7

  • March 15, 2025
  • 2 replies
  • 1216 views

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?

    This topic has been closed for replies.
    Best answer by mƎALLEm

    Thank you for the sharing.

    Indeed, because you set the system clock to 480MHz / VOS0:

    mALLEm_1-1742300012245.png

    mALLEm_2-1742300032084.png

    As I said before: "and Voltage scale 1@ 400MHz maximum."

    From the datasheet VOS0 is available only with LDO configuration:

    mALLEm_4-1742300357007.png

     

    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:

    mALLEm_3-1742300165153.png

    Hope that answers your question.

    2 replies

    KAnaharAuthor
    Visitor II
    March 17, 2025

    ++

    Technical Moderator
    March 18, 2025

    Hello,

    STM32H747I-DISCO is in SMPS configuration.

    Since you are using STM32CubeIDE, you need to set it to:

    mALLEm_0-1742295309539.png

    and Voltage scale 1@ 400MHz maximum.

    In the project preprocessor, you need to see that definition:

    mALLEm_1-1742296158782.png

    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.

    KAnaharAuthor
    Visitor II
    March 18, 2025

    There is no "USE_PWR_DIRECT_SMPS_SUPPLY" section, in my interface.

    KAnahar_0-1742297240299.png

     

    Technical Moderator
    March 18, 2025

    Could you please share your ioc file? 

    Is it a CubeMx view? Which version?