Skip to main content
Visitor II
February 4, 2020
Question

Jump to bootloader not working on STM32H7 rev "V". Bug in bootloader?

  • February 4, 2020
  • 0 replies
  • 413 views

I'm launching the bootloader from within code using previously posted examples. This works fine on "Y" and DFU enumerates as expected. On rev "V" this doesn't work - no enumeration. Has the entry point changed on rev "V" or is this a bug in the bootloader which I believe is a different version in rev "V" and which other threads indicate has issues?

Is there a way of getting the bootloader entry address? SYSCFG.UR3 gives the top 16bits but where is the rest defined?

 uint32_t i=0;
 void (*SysMemBootJump)(void);
 
 /* Set the address of the entry point to bootloader */
 volatile uint32_t BootAddr = 0x1FF09800;
 
 /* Disable all interrupts */
 __disable_irq();
 
 /* Disable Systick timer */
 SysTick->CTRL = 0;
 
 /* Set the clock to the default state */
 HAL_RCC_DeInit();
 
 /* Clear Interrupt Enable Register & Interrupt Pending Register */
 for (i=0;i<5;i++)
 {
	 NVIC->ICER[i]=0xFFFFFFFF;
	 NVIC->ICPR[i]=0xFFFFFFFF;
 }
 
 /* Re-enable all interrupts */
 __enable_irq();
 
 /* Set up the jump to booloader address + 4 */
 SysMemBootJump = (void (*)(void)) (*((uint32_t *) ((BootAddr + 4))));
 
 /* Set the main stack pointer to the bootloader stack */
 __set_MSP(*(uint32_t *)BootAddr);
 
 /* Call the function to jump to bootloader location */
 SysMemBootJump();
 
 /* Jump is done successfully */
 while (1)
 {
 /* Code should never reach this loop */
 }

    This topic has been closed for replies.