본문 바로가기

Firmware_Memory/STM32

STM32F401RE SW를 사용하여 System Memory Boot 진입 (BOOT0 핀 제외)

STM32 에서 사용하는 Bootloader로 진입하려면

보통은 BOOT0 pin에 high를 줘서 부팅 옵션을 바꿔줘야 한다.

하지만 BOOT0 pin에 다른 GPIO를 사용하고 있을 경우가 있다.

그럴 경우에는

System Memory Boot 주소로 점프하여 부팅하면

BOOT0 pin을 사용하지 않고도 System Memory boot 로 진입이 된다.

따라서 Bootloader로 자유롭게 이동할 수 있다.

원하는 위치에 다음 함수를 사용하면 된다.

 

void JumpToBootloader(void) 
{

	typedef void (*pFunction)(void);
	pFunction JumpToApplication;
	uint32_t JumpAddress;
	HAL_RCC_DeInit();
	SysTick->CTRL = 0;
	SysTick->LOAD = 0;
	SysTick->VAL = 0;
	/** * Step: Disable all interrupts */
	__disable_irq();
	/* ARM Cortex-M Programming Guide to Memory Barrier Instructions.*/
	__DSB();
	__HAL_SYSCFG_REMAPMEMORY_SYSTEMFLASH();
	/* Remap is bot visible at once. Execute some unrelated command! */
	__DSB();
	__ISB();
	JumpToApplication = (void (*)(void)) (*((uint32_t *)(0x1FFF0000 + 4)));
	/* Initialize user application's Stack Pointer */
	__set_MSP(*(__IO uint32_t*) 0x1FFF0000);
	JumpToApplication();

}