STM32를 이용해 Bootloader를 만들어야 할 이유는 다양하다. 보통은 Flash 영역 쓰기를 손쉽게 하기 위해서 사용하는데, 지금 목적은 매우 단순하다.
MPU - STM32F407VGT6
갑작스레 참여하게 된 Project.
편의를 위해 단순히 0x08020000으로 Jump 하는 Bootloader를 아래와 같이 작성하였다.
아래 Code는 STM32CubeIDE 에서 작성하였다.
main.c
volatile uint32_t appAddress = 0x08020000 ;
volatile uint32_t mspBegin = 0x20000000 ;
volatile uint32_t mspEnd = 0x20030000 ;
volatile uint32_t msp = ( * ( __IO uint32_t * ) appAddress ) ;
void ( ** pJumpFunc )( void ) = ( void ( ** )( void ) )( appAddress + 4 ) ;
char isWritten = 0x00 ;
if( ( uint32_t )( *pJumpFunc ) != 0xFFFFFFFF )
{
isWritten = 0x01 ;
}
if( isWritten && mspBegin <= msp && msp <= mspEnd )
{
HAL_DeInit() ;
( *pJumpFunc )() ;
}
STM32CubeIDE를 통해 Program의 시작 위치를 변경하려면,
STM32F407VGTX_FLASH.ld
MEMORY
{
CCMRAM (xrw) : ORIGIN = 0x10000000, LENGTH = 64K
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 128K
FLASH (rx) : ORIGIN = 0x8020000, LENGTH = 896K // <--- ORGIN and LENGTH
}