你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm32f103的bootloader和用户app问题

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

举报

13个回答
zhao.zhao 回答时间:2018-1-30 20:42:39
改2个地方
1、在"OPTION"的"target"中作如下改动
2、在"system_stm32f1xx.c"中,改变中断向量表的偏移
//#define VECT_TAB_OFFSET  0x0 //原来的数值
#define VECT_TAB_OFFSET  0x4000  //改动后的数值

// 偏移量在下面指令中被执行
#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
target.jpg

评分

参与人数 2ST金币 +1 蝴蝶豆 +5 收起 理由
fyp0303-1309862 + 1 很给力!按照你说的,总算解决问题了。.
zero99 + 5

查看全部评分

随风飘扬 回答时间:2018-1-29 17:29:15
编译app时链接文件需要设置,app里面的中断向量表需要设置,论坛里讨论iap的帖子应该挺多了,你搜一下吧。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

七哥 回答时间:2018-1-29 18:23:02
app编译时,要带偏移地址的。
就是要把0x0800000,改成0x08002000。

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

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中的程序是否开启了中断?先保证程序运行无措情况下进行测试。

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

随风飘扬 回答时间: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
生成文件的地址要和程序里的对应起来

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

Johnson Cao 回答时间:2018-1-30 13:55:31
应该跳转代码问题吧.
Johnson Cao 回答时间:2018-1-30 13:56:30
JumpAppEntry        PROC
                                EXPORT  JumpAppEntry             [WEAK]
                                LDR           R1, =APP_ADDRESS
                                LDR           R0, [R1, #4]
                                BX            R0
                                NOP
                                ENDP
给你一个代码看看.不能跳到0x8002000地址的,这是SP地址.要偏移4个字节.

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

qi夏天 回答时间:2018-2-1 13:26:41
跳转之前要清中断,不知是不是这里的问题,

评分

参与人数 1蝴蝶豆 +1 收起 理由
zero99 + 1

查看全部评分

zhao.zhao 回答时间:2018-2-1 20:04:53
F103,F3,F407 可以不清中断跳转,我试过。L0 L1系列的必须关闭已经打开的中断,才会跳转,否则死机。
Tcreat 回答时间:2018-2-2 14:55:17
社区资资料里又F103的IAP例程,IAP例程 和 用户例程都有提供,对照他那个移植下 应该不是很难的 我之前也对照例程改动了 没有问题

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版