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();
}
'Firmware_Memory > STM32' 카테고리의 다른 글
C compiler warning: 'return' with a value, in function returning void 발생한 경우 (0) | 2022.04.26 |
---|---|
STM32CUBEIDE 에서 warning: cannot find entry symbol Reset_Handler 이 발생한 경우 (0) | 2022.03.15 |
STM32CUBEIDE 에서 This project is not a CDT project 라고 나오는 경우 (0) | 2022.03.15 |
STM32 IAP 이슈 (0) | 2022.03.15 |