Boot Loader配置
设置ROM、RAM地址
//链接器脚本文件路径
Arduino\hardware\STM32\STM32F1\variants\generic_stm32f103z\ld\stm32f103ze.ld
//修改内容
MEMORY
{
ram (rwx) : ORIGIN = 0x20000000, LENGTH = 64K //内存起始地址及长度
rom (rx) : ORIGIN = 0x08000000, LENGTH = 512K //FLASH起始地址及长度
}
设置栈顶指针
void MSR_MSP(unsigned int addr)
{
__asm__ __volatile__("msr msp, r0"); //set Main Stack value
}
跳转User App
typedef void(*iapfun)(void);
iapfun userApp;
//参考正点原子IAP升级程序
if (((*(volatile unsigned int*)(0x08010000 + 4)) & 0xFF000000) == 0x08000000)
{
//检查User App中的REST中断向量
if (((*(volatile unsigned int*)0x08010000) & 0x2FFE0000) == 0x20000000)
{
//检查User App中的栈顶指针
userApp = (iapfun)*(volatile unsigned int*)(0x08010000 + 4);
//设置栈顶指针
MSR_MSP((*(volatile unsigned int*)0x08010000));
//跳转UserApp
userApp();
}
}
User App配置
设置ROM、RAM地址
//链接器脚本文件路径
Arduino\hardware\STM32\STM32F1\variants\generic_stm32f103z\ld\stm32f103ze.ld
//修改内容
MEMORY
{
ram (rwx) : ORIGIN = 0x20000000, LENGTH = 64K //内存起始地址及长度
rom (rx) : ORIGIN = 0x08010000, LENGTH = 502K //FLASH起始地址及长度
}
设置中断向量表
//设置中断向量表
nvic_set_vector_table(0x08000000, 0x10000);//FLASH的起始地址
bin文件烧写
JLINK烧写
- 使用JLINK连接STM32开发板
- 打开JFlash软件,选择Options -> Project Settings -> MCU
- 在Device选项框,点击…按钮
- Manufcaturer过滤框选择ST
- 在列表中选择STM32F013ZC
- 点击确定按钮保存
- File -> open data file打开*.bin文件
- Address设置为FLASH的起始地址0x8000000
- Target -> Connect连接设备
- Target -> Production Programming 开始烧写程序
- 烧写完毕后,复位开发板