Skip to main content
Graduate
June 7, 2025
Solved

How to correctly program STM32H755

  • June 7, 2025
  • 4 replies
  • 2057 views

Hi

I'm having troubles programming the stm32h755zit6 on my selfmade PCB. The schematics should be right, as i am able to programm the STM32. But if i run a simple code inwhich a certain pin should be pulled up high, it just won't work. Therefore I thought about debugging the code to see whether it reaches the part inwhich the GPIO-function is called. But instead it doesnt and ends up in a error_handler. Afterwards i somehow am not able to reprogramm the STM32H755 anymore as the message following message appears:

stmicroelectronics st-link gdb server. version 7.10.0 copyright (c) 2025, stmicroelectronics. all rights reserved. starting server with the following options: persistent mode : disabled logging level : 1 listen port number : 61234 status refresh delay : 15s verbose mode : disabled swd debug : enabled initwhile : enabled target no device found error in initializing st-link device. reason: no device found on target.


I have no done this over and over again three time an i always had to desolder the old uC and solder a new STM32 on my PCB, only for it to get the same result. Now I ran out of STM32s and thats why i need your help.

 

Its probably not possible to solve this problem without any code or schematics, so please tell me what you need. :D

 

Thanks in advance!!!

 

Kind Regards
Dominic

    This topic has been closed for replies.
    Best answer by _oepfel

    Thanks a lot this now fully solved my problem(s) and the pin is set to high. So now I can start with programming the real code.

    To Summarize what I did for others:
    1. VCAP and VSS were connected falsely --> solved "Target no device found"

    2. under Pinout & Configurations > System Core > RCC > Parameter Settings > Supply Source > PWR_LDO_SUPPLY --> solved "Target is not responding, retrying..."

    3. deleting the following code:

    /* USER CODE BEGIN Boot_Mode_Sequence_1 */
     /* Wait until CPU2 boots and enters in stop mode or timeout*/
     timeout = 0xFFFF;
     while((__HAL_RCC_GET_FLAG(RCC_FLAG_D2CKRDY) != RESET) && (timeout-- > 0));
     if ( timeout < 0 )
     {
     Error_Handler();
     }
    /* USER CODE END Boot_Mode_Sequence_1 */

    --> solved being stuck in Error_Handler();

     

    Many thanks to @TDK and @MM..1 you are some true heroes and I appreciate your help!

    4 replies

    Super User
    June 7, 2025

    > Its probably not possible to solve this problem without any code or schematics, so please tell me what you need.

    Schematic would help. Code would help.

    Should be able to recover by pulling BOOT0 high during reset.

    > ends up in a error_handler

    The call stack should tell you exactly where it "crashed".

    _oepfelAuthor
    Graduate
    June 8, 2025

    Schematic would help. Code would help.

    I have attached the schematics.

    The code is basically a bare STM32H755ZIT6 project inwhich I have tried to set pin PF11 to high. In RCC I have once tried without HSE and once with HSE Crystal/Ceramic Resistors

    I am able to program the whole code but I am unsure how to handle the programming with two cores. 

    And as mentioned, each time I tried to debug the code and determine where it gets stuck, I somehow end up getting the following error message and I am not able to programm the STM32 anymore. 

    In STM32CubeIDE:
    STMicroelectronics ST-LINK GDB server. Version 7.10.0
    Copyright (c) 2025, STMicroelectronics. All rights reserved.
    
    Starting server with the following options:
     Persistent Mode : Disabled
     Logging Level : 1
     Listen Port Number : 61234
     Status Refresh Delay : 15s
     Verbose Mode : Disabled
     SWD Debug : Enabled
     InitWhile : Enabled
    
    Target no device found
    
    Error in initializing ST-LINK device.
    Reason: No device found on target.
    
    in CubeProgrammer:
    error: unable to get core id
    error: No stm32 targe found! If your product embeds debug authentication, pleae perform a discovery using debug authentication

    Firstly:

    I actually was able to determine where the code was getting stuck prior to this error. As it seems to have gotten into the errorHandler by this code:

    /* USER CODE BEGIN Boot_Mode_Sequence_1 */
     /* Wait until CPU2 boots and enters in stop mode or timeout*/
     timeout = 0xFFFF;
     while((__HAL_RCC_GET_FLAG(RCC_FLAG_D2CKRDY) != RESET) && (timeout-- > 0));
     if ( timeout < 0 )
     {
     Error_Handler();
     }

     

    Secondly:

    I have also tried to Boot the stm32 after this error by doing the following:
    1. BOOT0 to high with a jumper-wire

    2. Pressing and holding the reset button.

    3. Trying to run the code and immediately release the reset button.

     

    But i get the same message as prior. 

     

    As mentioned I am unsure if i programm the stm32 correctly, as i just have opend the main.c of cm7 and then press "run". I have seen others selecting both cm4 and cm7 folders/files in the right bar and then pressing "run".

     

    I have also checked the voltages near the SWD-Connector and its pullups. And they are all as expected. Also when pressing the RST button the voltage drops to 0V and if I connect boot0 to High, it also get to 3.3V

    Graduate II
    June 8, 2025

    VCAP capacitors are critical to general functionality.

    I'd recommend using the Error_Handler() method passing __FILE__, __LINE__, it will save you a lot of time,and works in the field and for those without a debugger attached.

     

    Graduate II
    June 8, 2025

    Power cycling with BOOT0 strapped HIGH can be very effective at recovering H7 you've gotten into a bad/broken state. It stops YOUR code from running, and clears issues with LDO vs SMPS and VOS

    Get a serial port working so you can output useful/helpful diagnostic information.

    _oepfelAuthor
    Graduate
    June 8, 2025

    I've tried setting BOOT0 to high to recover the H7 with the following steps:

    1. BOOT0 to high with a jumper-wire

    2. Pressing and holding the reset button.

    3. Trying to run the code and immediately release the reset button.

    But I have received the same message as before. Was this sequence right?

     

    But at the moment I have soldered a brand new STM32H755ZIT6 onto the PCB and I just wan't to prevent it from doing the same, do you have any idea how?

    Super User
    June 8, 2025

    VCAP3 should be connected to the other VCAP pins.

    TDK_0-1749389977905.png

     

    VSS/VSSA pins should be connected directly to ground.

     

    Getting started with STM32H74xI/G and STM32H75xI/G MCU hardware development - Application note

     

    _oepfelAuthor
    Graduate
    June 8, 2025

    Thanks a lot, could this solve the other problem I had with not being able to programm the stm32 anymore after debugging, or might this be something else you noticed?

    Because I only have on brand new STM32H755ZIT6 left and I don't want it to get the same results.

    Super User
    June 8, 2025

    I don't know if this is the problem, but they are certainly two of the problems that need to be solved before you have a properly functioning chip. VCAP is important. Solid ground connection is important.

    _oepfelAuthor
    Graduate
    June 8, 2025

    I have now corrected the stm32 vcap and vss pins but I am getting the same result after pressing "run".

    The stlink-v3set com led was orange and the console log was showing something like:

    target not responding, retrying...
    target not responding, retrying...
    target not responding, retrying...
     

    Target unknown error 19

    Error in initializing ST-LINK device.
    Reason: Unknown. Please check power and cabling to target.

    after unplugging and replugging in the stlink v3set, i now always get this message in the stm32cubeIDE:

    STMicroelectronics ST-LINK GDB server. Version 7.10.0
    Copyright (c) 2025, STMicroelectronics. All rights reserved.
    
    Starting server with the following options:
     Persistent Mode : Disabled
     Logging Level : 1
     Listen Port Number : 61238
     Status Refresh Delay : 15s
     Verbose Mode : Disabled
     SWD Debug : Enabled
    
    Target no device found
    
    Error in initializing ST-LINK device.
    Reason: No device found on target.

     

    or in the stm32cubeProgrammer i get:
    _oepfel_2-1749400625323.png

    I then tried setting the boot0 to high and doing the reset sequence, and I got the usb connected and did a full chip erase as said.

     

    After that I was able to connect the stm32 in the cubeprogrammer but not in the ide to run my code. In the IDE I got this then i reprogrammed it and it got as prior:

    Erasing memory corresponding to sector 0:
    Erasing internal memory sector 8
    Download in Progress:
    
    
    File download complete
    Time elapsed during download operation: 00:00:01.010
    
    
    
    Verifying ...
    
    
    
    
    Download verified successfully 
    
    
    Target is not responding, retrying...
    Target is not responding, retrying...
    Target is not responding, retrying...
    Target is not responding, retrying...
    Shutting down...
    Target is not responding, retrying...
    Target is not responding, retrying...
    Target is not responding, retrying...
    Target is not responding, retrying...
    Target is not responding, retrying...
    Target is not responding, retrying...
    Target is not responding, retrying...
    Target is not responding, retrying...

    from here on I could repeat the process over and over again 

     

     what can I do now, I am just trying to upload a new bare stm32h755zit6 project with one gpio 

    .
    Graduate II
    June 8, 2025

    Maybe show your main code is good point. This result you can see too when STOP low power is used or pins for stlink is used in your code etc. Next issue is config SMPS , but our schematics show other config.

    In programmer instead BOOT0 try connect stlink under reset mode for erase fail code.

    _oepfelAuthor
    Graduate
    June 8, 2025

    sure here is the main from the cm7:

    /* USER CODE BEGIN Header */
    /**
     ******************************************************************************
     * @file : main.c
     * @brief : Main program body
     ******************************************************************************
     * @attention
     *
     * Copyright (c) 2025 STMicroelectronics.
     * All rights reserved.
     *
     * This software is licensed under terms that can be found in the LICENSE file
     * in the root directory of this software component.
     * If no LICENSE file comes with this software, it is provided AS-IS.
     *
     ******************************************************************************
     */
    /* USER CODE END Header */
    /* Includes ------------------------------------------------------------------*/
    #include "main.h"
    
    /* Private includes ----------------------------------------------------------*/
    /* USER CODE BEGIN Includes */
    
    /* USER CODE END Includes */
    
    /* Private typedef -----------------------------------------------------------*/
    /* USER CODE BEGIN PTD */
    
    /* USER CODE END PTD */
    
    /* Private define ------------------------------------------------------------*/
    /* USER CODE BEGIN PD */
    
    #ifndef HSEM_ID_0
    #define HSEM_ID_0 (0U) /* HW semaphore 0*/
    #endif
    
    /* USER CODE END PD */
    
    /* Private macro -------------------------------------------------------------*/
    /* USER CODE BEGIN PM */
    
    /* USER CODE END PM */
    
    /* Private variables ---------------------------------------------------------*/
    
    /* USER CODE BEGIN PV */
    
    /* USER CODE END PV */
    
    /* Private function prototypes -----------------------------------------------*/
    void SystemClock_Config(void);
    static void MPU_Config(void);
    static void MX_GPIO_Init(void);
    /* USER CODE BEGIN PFP */
    
    /* USER CODE END PFP */
    
    /* Private user code ---------------------------------------------------------*/
    /* USER CODE BEGIN 0 */
    
    /* USER CODE END 0 */
    
    /**
     * @brief The application entry point.
     * @retval int
     */
    int main(void)
    {
    
     /* USER CODE BEGIN 1 */
    
     /* USER CODE END 1 */
    /* USER CODE BEGIN Boot_Mode_Sequence_0 */
     int32_t timeout;
    /* USER CODE END Boot_Mode_Sequence_0 */
    
     /* MPU Configuration--------------------------------------------------------*/
     MPU_Config();
    
    /* USER CODE BEGIN Boot_Mode_Sequence_1 */
     /* Wait until CPU2 boots and enters in stop mode or timeout*/
     timeout = 0xFFFF;
     while((__HAL_RCC_GET_FLAG(RCC_FLAG_D2CKRDY) != RESET) && (timeout-- > 0));
     if ( timeout < 0 )
     {
     Error_Handler();
     }
    /* USER CODE END Boot_Mode_Sequence_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 Boot_Mode_Sequence_2 */
    /* When system initialization is finished, Cortex-M7 will release Cortex-M4 by means of
    HSEM notification */
    /*HW semaphore Clock enable*/
    __HAL_RCC_HSEM_CLK_ENABLE();
    /*Take HSEM */
    HAL_HSEM_FastTake(HSEM_ID_0);
    /*Release HSEM in order to notify the CPU2(CM4)*/
    HAL_HSEM_Release(HSEM_ID_0,0);
    /* wait until CPU2 wakes up from stop mode */
    timeout = 0xFFFF;
    while((__HAL_RCC_GET_FLAG(RCC_FLAG_D2CKRDY) == RESET) && (timeout-- > 0));
    if ( timeout < 0 )
    {
    Error_Handler();
    }
    /* USER CODE END Boot_Mode_Sequence_2 */
    
     /* USER CODE BEGIN SysInit */
    
     /* USER CODE END SysInit */
    
     /* Initialize all configured peripherals */
     MX_GPIO_Init();
     /* USER CODE BEGIN 2 */
    
     /* USER CODE END 2 */
    
     /* Infinite loop */
     /* USER CODE BEGIN WHILE */
     while (1)
     {
     /* USER CODE END WHILE */
    
     /* USER CODE BEGIN 3 */
     }
     /* USER CODE END 3 */
    }
    
    /**
     * @brief System Clock Configuration
     * @retval None
     */
    void SystemClock_Config(void)
    {
     RCC_OscInitTypeDef RCC_OscInitStruct = {0};
     RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
    
     /** Supply configuration update enable
     */
     HAL_PWREx_ConfigSupply(PWR_DIRECT_SMPS_SUPPLY);
    
     /** Configure the main internal regulator output voltage
     */
     __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE3);
    
     while(!__HAL_PWR_GET_FLAG(PWR_FLAG_VOSRDY)) {}
    
     /** Initializes the RCC Oscillators according to the specified parameters
     * in the RCC_OscInitTypeDef structure.
     */
     RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
     RCC_OscInitStruct.HSIState = RCC_HSI_DIV1;
     RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
     RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
     if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
     {
     Error_Handler();
     }
    
     /** Initializes the CPU, AHB and APB buses clocks
     */
     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_HSI;
     RCC_ClkInitStruct.SYSCLKDivider = RCC_SYSCLK_DIV1;
     RCC_ClkInitStruct.AHBCLKDivider = RCC_HCLK_DIV1;
     RCC_ClkInitStruct.APB3CLKDivider = RCC_APB3_DIV1;
     RCC_ClkInitStruct.APB1CLKDivider = RCC_APB1_DIV1;
     RCC_ClkInitStruct.APB2CLKDivider = RCC_APB2_DIV1;
     RCC_ClkInitStruct.APB4CLKDivider = RCC_APB4_DIV1;
    
     if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK)
     {
     Error_Handler();
     }
    }
    
    /**
     * @brief GPIO Initialization Function
     * @PAram None
     * @retval None
     */
    static void MX_GPIO_Init(void)
    {
     GPIO_InitTypeDef GPIO_InitStruct = {0};
     /* USER CODE BEGIN MX_GPIO_Init_1 */
    
     /* USER CODE END MX_GPIO_Init_1 */
    
     /* GPIO Ports Clock Enable */
     __HAL_RCC_GPIOF_CLK_ENABLE();
    
     /*Configure GPIO pin Output Level */
     HAL_GPIO_WritePin(GPIOF, GPIO_PIN_11, GPIO_PIN_SET);
    
     /*Configure GPIO pin : PF11 */
     GPIO_InitStruct.Pin = GPIO_PIN_11;
     GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
     GPIO_InitStruct.Pull = GPIO_NOPULL;
     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
     HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);
    
     /* USER CODE BEGIN MX_GPIO_Init_2 */
    
     /* USER CODE END MX_GPIO_Init_2 */
    }
    
    /* USER CODE BEGIN 4 */
    
    /* USER CODE END 4 */
    
     /* MPU Configuration */
    
    void MPU_Config(void)
    {
     MPU_Region_InitTypeDef MPU_InitStruct = {0};
    
     /* Disables the MPU */
     HAL_MPU_Disable();
    
     /** Initializes and configures the Region and the memory to be protected
     */
     MPU_InitStruct.Enable = MPU_REGION_ENABLE;
     MPU_InitStruct.Number = MPU_REGION_NUMBER0;
     MPU_InitStruct.BaseAddress = 0x0;
     MPU_InitStruct.Size = MPU_REGION_SIZE_4GB;
     MPU_InitStruct.SubRegionDisable = 0x87;
     MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL0;
     MPU_InitStruct.AccessPermission = MPU_REGION_NO_ACCESS;
     MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_DISABLE;
     MPU_InitStruct.IsShareable = MPU_ACCESS_SHAREABLE;
     MPU_InitStruct.IsCacheable = MPU_ACCESS_NOT_CACHEABLE;
     MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE;
    
     HAL_MPU_ConfigRegion(&MPU_InitStruct);
     /* Enables the MPU */
     HAL_MPU_Enable(MPU_PRIVILEGED_DEFAULT);
    
    }
    
    /**
     * @brief This function is executed in case of error occurrence.
     * @retval None
     */
    void Error_Handler(void)
    {
     /* USER CODE BEGIN Error_Handler_Debug */
     /* User can add his own implementation to report the HAL error return state */
     __disable_irq();
     while (1)
     {
     }
     /* USER CODE END Error_Handler_Debug */
    }
    
    #ifdef USE_FULL_ASSERT
    /**
     * @brief Reports the name of the source file and the source line number
     * where the assert_param error has occurred.
     * @PAram file: pointer to the source file name
     * @PAram line: assert_param error line source number
     * @retval None
     */
    void assert_failed(uint8_t *file, uint32_t line)
    {
     /* USER CODE BEGIN 6 */
     /* User can add his own implementation to report the file name and line number,
     ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
     /* USER CODE END 6 */
    }
    #endif /* USE_FULL_ASSERT */

     and the message i receive is:

    Memory Programming ...
     File : ST-LINK_GDB_server_a28400.srec
     Size : 7.96 KB 
     Address : 0x08000000 
    
    
    
    Erasing memory corresponding to sector 0:
    Erasing internal memory sector 0
    Download in Progress:
    
    
    File download complete
    Time elapsed during download operation: 00:00:00.972
    
    
    
    Verifying ...
    
    
    
    
    Download verified successfully 
    
    
    Target is not responding, retrying...
    Target is not responding, retrying...
    Target is not responding, retrying...
    Target is not responding, retrying...
    Shutting down...
    Target is not responding, retrying...
    Target is not responding, retrying...
    Target is not responding, retrying...
    Target is not responding, retrying...
    Target is not responding, retrying...
    Target is not responding, retrying...
    Target is not responding, retrying...
    Target is not responding, retrying...

    is there any way to share the whole project or don't you need that?

    What could I do next