Skip to main content
Visitor II
December 23, 2025
Solved

How to jump to system bootloader from application code on STM32H573 microcontrollers

  • December 23, 2025
  • 4 replies
  • 410 views

I need to use embedded STM32H573 bootloader to update customer application using UART1 or uart3.

I try to use AN2606, but no success. May you provide correct code to jump from application to the embedded bootloader for specific processor model: STM32H573, please?

Best answer by mƎALLEm

Hello,

You can refer to this knowledge base article: How to jump to system bootloader from application code on STM32 microcontrollers

Hope that helps.

4 replies

gbm
Super User
December 23, 2025
#include "stm32h5xx.h"
#define BOOT_ADDR 0x0BF97000
#include "cm_boot.h" // https://github.com/gbm-ii/STM32_Inc/blob/main/cm_boot.h

int main(void)
{
		
 app_start(BOOT_ADDR);	// start ST built-in bootloader
}

The code must be compiled with -O1 or above - see the comments in cm_boot.h

My STM32 stuff on github - compact USB device stack and more: https://github.com/gbm-ii/gbmUSBdevice
T_Hamdi
ST Employee
December 24, 2025

Hello @pavelkotel 

to enter the STM32H573 system bootloader using hardware (as described in AN2606):

  1. Connect the BOOT0 pin to HIGH (1).
  2. Press the RESET button.

This will make the microcontroller start from the system memory bootloader instead of your application.

Then, connect the board to your host using one of the USART interfaces shown in the figure (USART1,USART2 or USART3, depending on your hardware).

you can also use STM32CubeProgrammer and select the appropriate USART interface when connecting to the board for firmware update.

T_Hamdi_0-1766565804469.png

Best regards,

Hamdi

 

"To give better visibility on the answered topics, please click on ""Accept as Solution"" on the reply which solved your issue or answered your question.Hamdi Teyeb"
JTan.2
Associate
June 16, 2026

Hi sir, looking at AN2606, for STM32H533, it seems there is no way around using BOOT0 pin, and I don’t want to set the product to PROVISIONING yet. Is there really no other way?

I tried using a RC circuit and another GPIO to toggle the pin high and hold it for awhile before resetting but it doesn’t seem to work well.

static void JumpToBootloader(void)
{
    // Drive BOOT0 high via RC circuit
    HAL_GPIO_WritePin(ENTER_BL_GPIO_Port, ENTER_BL_Pin, GPIO_PIN_SET);

    // Wait for cap to fully charge (5τ = 5 × 1kΩ × 1µF = 5ms, use 50ms for margin)
    HAL_Delay(50);

    // System reset — GPIO goes hi-Z but cap holds BOOT0 high for ~30ms
    NVIC_SystemReset();
}

Thanks in advance!

mƎALLEm
mƎALLEmBest answer
ST Technical Moderator
December 24, 2025

Hello,

You can refer to this knowledge base article: How to jump to system bootloader from application code on STM32 microcontrollers

Hope that helps.

To give better visibility on the answered topics, please click "Best answer" on the reply which solved your issue or answered your question.