stm32f103的bootloader和用户app问题
bootloader下面简称iap 用户程序简称app本人自己写的bootloader的代码,跳转和复位都有.app用 的iar开发的,生成的hex文件,解析里面的数据传输到mcu的首地址0x08002000.数据2头校验都是通过的,说明数据应该是没有错的,且都写进了flash;
但是升级之后 不能正常运行.是不是app程序的iar环境哪里需要特殊设置吗?
期待大神解答,不胜感激!
改2个地方
1、在"OPTION"的"target"中作如下改动
2、在"system_stm32f1xx.c"中,改变中断向量表的偏移
//#define VECT_TAB_OFFSET0x0 //原来的数值
#define VECT_TAB_OFFSET0x4000//改动后的数值
// 偏移量在下面指令中被执行
#ifdef VECT_TAB_SRAM
SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */
#else
SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH. */
#endif
编译app时链接文件需要设置,app里面的中断向量表需要设置,论坛里讨论iap的帖子应该挺多了,你搜一下吧。 app编译时,要带偏移地址的。
就是要把0x0800000,改成0x08002000。 yu0405jie 发表于 2018-1-29 17:29
编译app时链接文件需要设置,app里面的中断向量表需要设置,论坛里讨论iap的帖子应该挺多了,你搜一下吧。 ...
设置了
在app的main里面 yu0405jie 发表于 2018-1-29 17:29
编译app时链接文件需要设置,app里面的中断向量表需要设置,论坛里讨论iap的帖子应该挺多了,你搜一下吧。 ...
在app的main里面加了
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x2000);
在linker里面也配置了0x8002000
肯定的是升级的程序都写好了
但是app在把中断向量该回来,代码地址该回来的时候,都好的
bootloder中的程序是否开启了中断?先保证程序运行无措情况下进行测试。 zhxqiao 发表于 2018-1-29 19:08
在app的main里面加了
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x2000);
在linker里面也配置了0x8002000 ...
那你把bootloader中关于到app跳转部分的代码贴出来看看吧 生成文件的地址要和程序里的对应起来 应该跳转代码问题吧. JumpAppEntry PROC
EXPORTJumpAppEntry
LDR R1, =APP_ADDRESS
LDR R0,
BX R0
NOP
ENDP
给你一个代码看看.不能跳到0x8002000地址的,这是SP地址.要偏移4个字节.
页:
[1]
2