STM32F0的中断向量默认在FLASH地址0x8000000处,并且只支持中断向量重定向到RAM,为此如果bootloader占用了0x8000000地址后用户程序只能将中断向量复制到RAM运行。
1.BOOT程序放在flash开始处
如下图,实现Bootloader的程序(BOOT)放到Flash开始地址(物理)处0x8000000.长度根据boot程序的大小限制一下;下图中设置了前8k为boot程序空间,这个设置要与用户程序的开始地址相匹配;

2.主要功能程序
从UART读取数据后写入flash这里不再说明,可使用ST库函数轻松实现,以下为如何实现向用户程序的跳转:
#define MAIN_USER_FLASH_BEGIN 0x8002000 //用户程序存储地址
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();
}
</

本文围绕STM32F0展开,因其中断向量默认在FLASH地址0x8000000且只支持重定向到RAM,若bootloader占用该地址,用户程序需将中断向量复制到RAM运行。介绍了将BOOT程序放于Flash开始处、实现向用户程序跳转,以及用户程序定位和中断向量复制等内容,还提供示例源代码下载。
最低0.47元/天 解锁文章
1097

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



