Skip to main content
Visitor II
July 21, 2022
Question

STM32H7 very hot

  • July 21, 2022
  • 12 replies
  • 8556 views

Hello dear community,

I've started using STM32H743VGT6 on a custom board I've made.

I'm testing the hardware now and I quickly detected that the temperature is really high (approx. 70°c on the top of the chip package).

I have another board, based on a STM32H743BIT6, quite similar, and the temperature of this one seems normal (approx. 40°C)

  • dividing the H7 clock speed by 2 really helps to reduce the temperature, but my original clock config seems right (tested with cubeMX)
  • It's not easy for me to measure the current drawn by the H7, as the 3V3 is used by many other devices

Have you ever experienced that kind of issue?

Thanks a lot, have a nice day!

Jean

    This topic has been closed for replies.

    12 replies

    jeanAuthor
    Visitor II
    July 21, 2022

    My external crystal is 25MHz

    Here is my system clock init :

    void System::Init()
    {
     HAL_Init();
     HAL_MspInit();
     
     /* Supply configuration update enable & configure the main internal regulator output voltage*/
     HAL_PWREx_ConfigSupply(PWR_LDO_SUPPLY);
     __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE0);
     while(!__HAL_PWR_GET_FLAG(PWR_FLAG_VOSRDY)) { }
     
     /* Initializes the RCC Oscillators according to the specified parameters in the RCC_OscInitTypeDef structure */
     RCC_OscInitTypeDef RCC_OscInitStruct;
     RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE | RCC_OSCILLATORTYPE_HSI48;
     RCC_OscInitStruct.HSEState = RCC_HSE_ON;
     RCC_OscInitStruct.HSI48State = RCC_HSI48_ON;
     RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
     RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
     RCC_OscInitStruct.PLL.PLLM = 5; // 25MHz / 5 = 5MHz
     RCC_OscInitStruct.PLL.PLLN = 192; // 5MHz * 192 = 960MHz
     RCC_OscInitStruct.PLL.PLLP = 2; // 960MHz / 2 = 480MHz = SYSCLK
     RCC_OscInitStruct.PLL.PLLQ = 20; // 960MHz / 20 = 48MHz = SDCARD
     RCC_OscInitStruct.PLL.PLLR = 2;
     RCC_OscInitStruct.PLL.PLLRGE = RCC_PLL1VCIRANGE_2;
     RCC_OscInitStruct.PLL.PLLVCOSEL = RCC_PLL1VCOWIDE;
     RCC_OscInitStruct.PLL.PLLFRACN = 0;
     if(HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) __DEBUG_BKPT();
     
     /* Initializes the CPU, AHB and APB buses clocks */
     RCC_ClkInitTypeDef RCC_ClkInitStruct;
     RCC_ClkInitStruct.ClockType
     = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2 | RCC_CLOCKTYPE_D3PCLK1 | RCC_CLOCKTYPE_D1PCLK1;
     RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
     RCC_ClkInitStruct.SYSCLKDivider = RCC_SYSCLK_DIV1;
     RCC_ClkInitStruct.AHBCLKDivider = RCC_HCLK_DIV2;
     RCC_ClkInitStruct.APB3CLKDivider = RCC_APB3_DIV2;
     RCC_ClkInitStruct.APB1CLKDivider = RCC_APB1_DIV4;
     RCC_ClkInitStruct.APB2CLKDivider = RCC_APB2_DIV2;
     RCC_ClkInitStruct.APB4CLKDivider = RCC_APB4_DIV2;
     if(HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4) != HAL_OK) __DEBUG_BKPT();
     
     /* Peripherals Common Clock Configuration */
     RCC_PeriphCLKInitTypeDef PeriphClkInitStruct;
     PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_CKPER;
     PeriphClkInitStruct.CkperClockSelection = RCC_CLKPSOURCE_HSI;
     if(HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) __DEBUG_BKPT();
     
     /* Systick priority and frequency */
     HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
     HAL_SYSTICK_Config(HAL_RCC_GetSysClockFreq() / 8000); // 0.125ms
     
     __HAL_RCC_RNG_CLK_ENABLE();
     
     /* DMA controller clock enable */
     __HAL_RCC_DMA1_CLK_ENABLE();
    }

    Graduate II
    July 21, 2022

    Board level issue, stop looking at the SW

    Graduate
    July 22, 2022

    "It's not easy for me to measure the current drawn by the H7...." - can you put the chip in sleep/stop/standby mode and measure the differential current? Can you try building a board with just the micro on it (and the bare essentials for running the micro)?

    Graduate II
    July 22, 2022

    Check that the H7 is not used as a conduction path. Double check power and ground nets in the design. Look for shorts in the construction or assembly of the board.

    Check parts and circuit around VCAP pins.

    Check you don't have LDO outputs fighting. Check for other output pins which could be driving opposite signal states.​

    jeanAuthor
    Visitor II
    July 26, 2022

    Thanks for your ideas!

    • check circuit around VCAP : everything fine
    • LDO outputs fighting : only PWR_LDO_SUPPLY configured (System::Init)
    • output pins which could be driving opposite signal states : everything fine
    • no power path are conducted by the H7
    • tested all shorts : nothing detected, no low impedances
    • power and ground paths are solid (also voltages are proper)

    I think it may be not a hardware issue, because the clocking of the H7 really affect the temperature and the current consumption :

    By the way I now use a more precise temperature sensor, max temp is 50° (not 70°, sorry for the approximation), and the ambient temperature was 28° during testing.

    During normal operation (app is running)

    H7 external temp = 51°C

    H7 current consumption on 3V3 = 190mA

    During normal operation, but with clocking divided (240MHz instead of 480MHz)

    H7 external temp = 44°C

    H7 current consumption on 3V3 = 100mA

    Note : no H7 output pins are used to drive power (eg leds) so the current consumption should correspond to the supply of the internal power of the H7.

    ... Maybe my results are normal for a LQFP-100 package and I have no issues?

    Or maybe I still get a clocking issue? Or a hardware problem...

    Graduate II
    July 26, 2022

    I am quite sure that a damaged part has high current surge independant of **** speed. Have a look at the datasheet and the values given there resemble the values you measure.

    Graduate II
    July 26, 2022

    Well 70C (158F) is burn your finger type hot, it would be uncomfortable to touch

    The parts can get warm if doing heavy processing. Perhaps having a NUCLEO doing similar work would be a helpful counter-point.

    jeanAuthor
    Visitor II
    July 27, 2022

    Thanks!

    To be honest, I had trouble to find the right info in the H743 datasheet https://www.mouser.fr/datasheet/2/389/stm32h743vi-1760857.pdf

    Today I've found that indeed, with

    • All peripherals enabled (that's closer to my case)
    • frcc = 400MHz
    • cache ON

    The typical current consumption is 165mA and the max is 220mA (Tj = 25°)

    That's very close to my testings.

    So I guess that everything is normal!

    Thanks a lot for your help :)

    Graduate
    July 27, 2022

    I'm glad you've found your answer. But I have a couple of things that you might consider:

    • A solid (or as solid as you can make it) ground plane can help spread the heat and therefore reduce the overall temperature. Or a heat-sink as found on many microprocessors.
    • Are you aware of AN5337 "STM32H7 Series lifetime estimates" which states that running for extended periods at high clock speeds will significantly shorten the lifetime of stm32h7. So maybe such high speeds may only be used for short bursts.
    jeanAuthor
    Visitor II
    July 28, 2022

    Thanks for the AN5337 info! That's interesting. I've never thought about using a lower frequency. Every previous project using STM32F was running at max speed and the heat was low. Even my STM32H743 package running at 480MHz in a big package (LQFP-208) was not heating.

    So indeed I might use a lower system frequency for my STM32H743 LQFP-100

    I already have a wide, solid ground plane under the H7. I will also think about a place for a heat-sink.