초보의 아웅다웅 설계하기/STM32

STM32F031 IAP - Keil 적용

로망와니 2023. 2. 19. 00:19

STM32F0xx에는 SCB->VTOR가 존재하지 않습니다.

  __IO uint32_t VTOR;                    /*!< Offset: 0x008 (R/W)  Vector Table Offset Register                          */

 

그래서 아래의 부분이 필요합니다.

/* Relocate by software the vector table to the internal SRAM at 0x20000000 ***/  

  /* Copy the vector table from the Flash (mapped at the base of the application
     load address 0x08003000) to the base address of the SRAM at 0x20000000. */
  for(i = 0; i < 48; i++)
  {
    VectorTable[i] = *(__IO uint32_t*)(APPLICATION_ADDRESS + (i<<2));
  }

  /* Enable the SYSCFG peripheral clock*/
  RCC_APB2PeriphResetCmd(RCC_APB2Periph_SYSCFG, ENABLE); 
  /* Remap SRAM at 0x00000000 */
  SYSCFG_MemoryRemapConfig(SYSCFG_MemoryRemap_SRAM);

 

Flash 용량에 따라 flash_if.h의 수정이 필요합니다.

#if FLASH64KB
#define USER_FLASH_LAST_PAGE_ADDRESS  0x0800F800
#define USER_FLASH_END_ADDRESS        0x0800FFFF /* 64 KBytes */
#else //FLASH32KB
#define USER_FLASH_LAST_PAGE_ADDRESS  0x08007800
#define USER_FLASH_END_ADDRESS        0x08007FFF /* 32 KBytes */
#endif

#define FLASH_PAGE_SIZE               0x400      /* 1 Kbytes */

 

저는 031에 적용하였지만 다른 0xx시리즈도 크게 다를 것 같지 않습니다.

 

 

Bootloader

 

Application

 

Application은 IAP 안에 binary_template 폴더 안에 있습니다.

https://www.st.com/en/embedded-software/stsw-stm32116.html

en.stm32f0_programming_usart.zip
1.58MB