cancel
Showing results for 
Search instead for 
Did you mean: 

application jump to system memory bootloader

Schmid.M.
Senior

Hi,

I have an stm32l43 connected as a USB device. Using the BOOT0 pin, I can start the built-in Bootloader and use DFU. Now I wish to jump to the BL without this Pin by a software jump.

But with this jump, I only seem to reset the device (my code starts again like after a reset). It seems to me that the Bootloader starts, checks for valid code in flash and then streight jumps back there (as my firmware of course is valid code).

How can I get the Bootloader staying active without using a boot pin or an option bit?

here is my jump function for reference:

void jump2STinternalBootloader(void){
	void (*SysMemBootJump)(void);
 
	/**
	 * Set system memory address.
	 *       check AN2606 document for descriptions of memory addresses
	 */
	volatile uint32_t addr = 0x1FFF0000;
 
	/**
	 * Disable RCC, set it to default (after reset) settings
	 *       Internal clock, no PLL, etc.
	 */
	HAL_RCC_DeInit();
 
	/**
	 * Disable systick timer and reset it to default values
	 */
	SysTick->CTRL = 0;
	SysTick->LOAD = 0;
	SysTick->VAL = 0;
 
	/**
	 * Disable all interrupts
	 */
	__disable_irq();
 
	/**
	 * Remap system memory to address 0x0000 0000 in address space
	 */
	__HAL_SYSCFG_REMAPMEMORY_SYSTEMFLASH();
 
	/**
	 * Set jump memory location for system memory
	 *       Use address with 4 bytes offset which specifies jump location where program starts
	 */
	SysMemBootJump = (void (*)(void)) (*((uint32_t *)(addr + 4)));
 
	/**
	 * Set main stack pointer.
	 *       This step must be done last otherwise local variables in this function
	 *       don't have proper value since stack pointer is located on different position
	 *
	 *       Set direct address location which specifies stack pointer in SRAM location
	 */
	__set_MSP(*(uint32_t *)addr);
 
	/**
	 * Actually call our function to jump to set location
	 *       This will start system memory execution
	 */
	SysMemBootJump();
	while(1);
}

This discussion is locked. Please start a new topic to ask your question.
10 REPLIES 10

Thanks for update. Don't hesitate to select your post as Best Answer in order to close this thread (I did it for you this time ;) ).

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.