Add jump-to-bootloader functionality

This commit is contained in:
Markus Koch 2021-03-02 19:27:50 +01:00
parent c5a770a52c
commit 7b895a2561
2 changed files with 29 additions and 1 deletions

View File

@ -262,3 +262,29 @@ void ConfigureGPIO( uint8_t gpio, int parameters )
GPIO_Init(GPIOOf(gpio), &GPIO_InitStructure); GPIO_Init(GPIOOf(gpio), &GPIO_InitStructure);
} }
void JumpToBootloader(void) {
// Many thanks to https://stm32f4-discovery.net/2017/04/tutorial-jump-system-memory-software-stm32/
void (*SysMemBootJump)(void);
volatile uint32_t addr = 0x1FFF0000;
RCC_DeInit();
// Disable and reset systick
SysTick->CTRL = 0;
SysTick->LOAD = 0;
SysTick->VAL = 0;
__disable_irq();
// Remap system memory
SYSCFG->MEMRMP = 0x01;
SysMemBootJump = (void (*)(void)) (*((uint32_t *)(addr + 4)));
// Set main stack pointer
__set_MSP(*(uint32_t *)addr);
// Jump
SysMemBootJump();
}

View File

@ -54,8 +54,10 @@ void ConfigureGPIO( gpio gpio, int parameters );
#endif #endif
void ConfigureUART(); void ConfigureUART();
void ConfigureLED(); void ConfigureLED();
void JumpToBootloader(void);
#define LED_TOGGLE {GPIOOf(LEDPIN)->ODR^=(1<<((LEDPIN)&0x0f));} #define LED_TOGGLE {GPIOOf(LEDPIN)->ODR^=(1<<((LEDPIN)&0x0f));}
#define LED_ON GPIOOn(LEDPIN) #define LED_ON GPIOOn(LEDPIN)
#define LED_OFF GPIOOff(LEDPIN) #define LED_OFF GPIOOff(LEDPIN)