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…