Add jump-to-bootloader functionality
This commit is contained in:
parent
c5a770a52c
commit
7b895a2561
@ -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();
|
||||||
|
}
|
||||||
|
@ -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)
|
||||||
|
Loading…
Reference in New Issue
Block a user