zhxqiao 发表于 2018-1-29 17:23:57

stm32f103的bootloader和用户app问题

bootloader下面简称iap    用户程序简称app
本人自己写的bootloader的代码,跳转和复位都有.app用 的iar开发的,生成的hex文件,解析里面的数据传输到mcu的首地址0x08002000.数据2头校验都是通过的,说明数据应该是没有错的,且都写进了flash;
但是升级之后 不能正常运行.是不是app程序的iar环境哪里需要特殊设置吗?
期待大神解答,不胜感激!

zhao.zhao 发表于 2018-1-30 20:42:39

改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

yu0405jie 发表于 2018-1-29 17:29:15

编译app时链接文件需要设置,app里面的中断向量表需要设置,论坛里讨论iap的帖子应该挺多了,你搜一下吧。

toofree 发表于 2018-1-29 18:23:02

app编译时,要带偏移地址的。
就是要把0x0800000,改成0x08002000。

zhxqiao 发表于 2018-1-29 19:07:20

yu0405jie 发表于 2018-1-29 17:29
编译app时链接文件需要设置,app里面的中断向量表需要设置,论坛里讨论iap的帖子应该挺多了,你搜一下吧。 ...

设置了
在app的main里面

zhxqiao 发表于 2018-1-29 19:08:56

yu0405jie 发表于 2018-1-29 17:29
编译app时链接文件需要设置,app里面的中断向量表需要设置,论坛里讨论iap的帖子应该挺多了,你搜一下吧。 ...

在app的main里面加了
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x2000);
在linker里面也配置了0x8002000
肯定的是升级的程序都写好了
但是app在把中断向量该回来,代码地址该回来的时候,都好的

发表于 2018-1-30 08:44:00

bootloder中的程序是否开启了中断?先保证程序运行无措情况下进行测试。

yu0405jie 发表于 2018-1-30 09:42:14

zhxqiao 发表于 2018-1-29 19:08
在app的main里面加了
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x2000);
在linker里面也配置了0x8002000 ...

那你把bootloader中关于到app跳转部分的代码贴出来看看吧

wudianjun2001 发表于 2018-1-30 13:49:42

生成文件的地址要和程序里的对应起来

Johnson Cao 发表于 2018-1-30 13:55:31

应该跳转代码问题吧.

Johnson Cao 发表于 2018-1-30 13:56:30

JumpAppEntry        PROC
                                EXPORTJumpAppEntry            
                                LDR           R1, =APP_ADDRESS
                                LDR           R0,
                                BX            R0
                                NOP
                                ENDP
给你一个代码看看.不能跳到0x8002000地址的,这是SP地址.要偏移4个字节.
页: [1] 2
查看完整版本: stm32f103的bootloader和用户app问题