Skip to main content
Associate II
June 7, 2025
Solved

How to correctly program STM32H755

  • June 7, 2025
  • 4 replies
  • 2058 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

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

TDK
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".

"If you feel a post has answered your question, please click ""Accept as Solution""."
_oepfelAuthor
Associate II
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

Tesla DeLorean
Guru
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.

 

Tips, Buy me a coffee, or three.. PayPal VenmoUp vote any posts that you find helpful, it shows what's working..
Tesla DeLorean
Guru
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.

Tips, Buy me a coffee, or three.. PayPal VenmoUp vote any posts that you find helpful, it shows what's working..
_oepfelAuthor
Associate II
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?

TDK
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

 

"If you feel a post has answered your question, please click ""Accept as Solution""."
_oepfelAuthor
Associate II
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.

TDK
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.

"If you feel a post has answered your question, please click ""Accept as Solution""."
_oepfelAuthor
Associate II
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 

.
MM..1
Chief III
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
Associate II
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