// // Created by xemon on 02.11.22. // #include CMSIS_device_header typedef void (*pFunction)(void); void BootJumpToAddress(const uint32_t address) { uint32_t appStack; pFunction appEntry; // get the application stack pointer (1st entry in the app vector table) appStack = (uint32_t) *((__IO uint32_t *) address); // Get the app entry point (2nd entry in the app vector table appEntry = (pFunction) *(__IO uint32_t *) (address + 4); // HAL_RCC_DeInit(); // HAL_DeInit(); SysTick->CTRL = 0; SysTick->LOAD = 0; SysTick->VAL = 0; uint32_t i = SCB->VTOR; i++; // Reconfigure vector table offset to match the app location //#if (SET_VECTOR_TABLE) // SCB->VTOR = address; //#endif // //// __disable_irq(); // disable interrupt //// __enable_irq(); //// __set_PRIMASK(1); //// __set_MSP(appStack); // Set app stack pointer __disable_irq(); __set_MSP(appStack); SCB->VTOR = address; __enable_irq(); appEntry(); // Start the app while (1); // never reached }