STM32F1(CORTEX-M3) 支持中断向量重定向,也就是可以重新设置中断向量在FLASH中的地址,这个功能使IAP实现变得非常完美。
1.BOOT程序放在flash开始处
如下图,实现Bootloader的程序(BOOT)放到Flash开始地址(物理)处0x8000000,这也是芯片复位后开始执行的地址,上电时BOOT程序先执行。

2.主要功能程序
从UART读取数据后写入flash这里不说明,可使用ST库函数轻松实现,以下为如何实现向用户程序的跳转:
#define MAIN_USER_FLASH_BEGIN 0x8003000 //用户程序存储地址,前12K字节用于bootloader
typedef void (*RESET_FUNCTION )(void); //复位函数模型
//从BOOT程序跳转到用户程序
void ExecApp(void)
{
uint32_t jump_addr=*((__IO uint32_t *)(MAIN_USER_FLASH_BEGIN+4));
RESET_FUNCTION Reset=(RESET_FUNCTION)jump_addr;
// ....
__set_MSP(*(__IO uint32_t*)MAIN_USER_FLASH_BEGIN);
Reset();
}
3.用户程序(APP)

最低0.47元/天 解锁文章
4140

被折叠的 条评论
为什么被折叠?



