jump to bootloader failed in stm32f765
Hi all,
I am trying to develop a bootloader software for STM32F765.
I requires two features in it.
1) jumping from Bootloader to Application
2) jumping from Application to Bootloader
I could make jump from Bootloader to Application very easily.
But I am suffering with jumping from Application to Bootloader for 4-5 days now.
The final code I tried is given below:
void Bootloader_JumpToBootloader_Program(void)
{
void (*app_reset_handler)(void);
__disable_irq();
SysTick->CTRL = 0 ;
SysTick->LOAD = 0;
SysTick->VAL = 0;
HAL_RCC_DeInit();
HAL_DeInit();
/* 2) disable all enabled interrupts */
NVIC->ICER[ 0 ] = 0xFFFFFFFF ;
NVIC->ICER[ 1 ] = 0xFFFFFFFF ;
NVIC->ICER[ 2 ] = 0xFFFFFFFF ;
NVIC->ICER[ 3 ] = 0xFFFFFFFF ;
NVIC->ICER[ 4 ] = 0xFFFFFFFF ;
NVIC->ICER[ 5 ] = 0xFFFFFFFF ;
NVIC->ICER[ 6 ] = 0xFFFFFFFF ;
NVIC->ICER[ 7 ] = 0xFFFFFFFF ;
NVIC->ICPR[ 0 ] = 0xFFFFFFFF ;
NVIC->ICPR[ 1 ] = 0xFFFFFFFF ;
NVIC->ICPR[ 2 ] = 0xFFFFFFFF ;
NVIC->ICPR[ 3 ] = 0xFFFFFFFF ;
NVIC->ICPR[ 4 ] = 0xFFFFFFFF ;
NVIC->ICPR[ 5 ] = 0xFFFFFFFF ;
NVIC->ICPR[ 6 ] = 0xFFFFFFFF ;
NVIC->ICPR[ 7 ] = 0xFFFFFFFF ;
// Set embedded bootloader vector table base offset
WRITE_REG(SCB->VTOR, SCB_VTOR_TBLOFF_Msk & 0x00000000);
__enable_irq();
// Instruction synchronization barrier
__ISB();
uint32_t msp_val = *(uint32_t *)SYSTEM_START_ADDRESS;////SYSTEM_START_ADDRESS
__set_MSP(msp_val);
__DSB(); // Data synchronization barrier
__ISB(); // Instruction synchronization barrier
uint32_t reset_handler_address = *(uint32_t *)(SYSTEM_START_ADDRESS + 4);////SYSTEM_START_ADDRESS
/* assign the reset handler address to reset handler */
app_reset_handler = (void *)reset_handler_address;
app_reset_handler = (void (*) (void))reset_handler_address;
/* Jump to reset handler of the User Application */
app_reset_handler();
}Please share your valuable suggestions to solve the issue.
Sajeevan.K
