STM32 Cube IDE 下实现 IAP —— (1) 程序跳转

ST 推出自家的IDE:STM32 CubeIDE 有一段时间了,现在正好有新的项目了,尝试直接把它用起来了,不用再来回去切换 CubeMX 和其他 IDE 了。

目前的项目是要做一个 IAP 的框架,那就先从 Bootloader 到 APP 的程序跳转开始。手头正好有一块 NUCLEO-F072RB,就用它了。

首先新建一个工程:IAP_Bootloader

Bootloader 的一项任务就是要跳转到用户 APP 去执行。在 main.c 中新建一个函数 go2APP

#define FLASH_APP_ADDR 0x8008000
typedef void (*pFunction)(void);

void go2APP(void) {
  uint32_t JumpAddress;
  pFunction Jump_To_Application;

  printf("BOOTLOADER Start\n");

  //Check
  if (((*(__IO uint32_t*) FLASH_APP_ADDR) & 0x2FFE0000) == 0x20000000) {
    printf("APP Start...\n");
    HAL_Delay(100);
    // Jump to user application //
    JumpAddress = *(__IO uint32_t*) (FLASH_APP_ADDR + 4);
    Jump_To_Application = (pFunction) JumpAddress;
    // Initialize user application's Stack Pointer //
    __set_MSP(*(__IO uint32_t*) FLASH_APP_ADDR);
    Jump_To_Application();
  } else {
    printf("No APP found!!!\n");
  }
}

先简单预留 32KB 给 Bootloader,所以 FLASH_APP_ADDR 就是从 0x8008000 开始。如何从串口 printf,可以参考这里 (STM32 Cube IDE 下实现串口 printf)

Read More…Read More…