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

stm32l4 IAP无法跳转问题

[复制链接]
wt13568089592 提问时间:2017-8-29 17:43 /
最近搞stm32l433ccu6,移植了原子的IAP,但是发现无法大多时候无法跳转到APP(偶尔能跳转到APP),求解啊。

  1. //跳转到应用程序段
  2. //appxaddr:用户代码起始地址.
  3. void iap_load_app(u32 appxaddr)
  4. {
  5.         INTX_DISABLE();
  6.         jump2app=(iapfun)*(vu32*)(appxaddr+4);    //用户代码区第二个字为程序开始地址(复位地址)
  7.         __set_MSP(*(__IO uint32_t*)appxaddr);
  8.         //        MSR_MSP(*(vu32*)appxaddr);     //初始化APP堆栈指针(用户代码区的第一个字用于存放栈顶地址)
  9.                 jump2app();                       //跳转到APP
  10. }
复制代码


收藏 评论12 发布时间:2017-8-29 17:43

举报

12个回答
队长shiwo 回答时间:2017-8-29 18:02:42
跳转前要关全局中断
moyanming2013 回答时间:2017-8-29 20:44:13
1.别忘了重定位向量表。
2.参考STM32CUBE示例程序,你相信ST官方还是小作坊?
freeelectron 回答时间:2017-8-30 09:15:11
1、首先要确认是跳转了没成功,还是没跳转?
2、跳转之后要重新设置堆栈
3、跳转之前要关闭中断,同时要检查栈顶地址是否合法

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

wt13568089592 回答时间:2017-8-30 17:00:16
队长shiwo 发表于 2017-8-29 18:02
跳转前要关全局中断

怎么关全局中断?我用的HAL库
wt13568089592 回答时间:2017-8-30 17:01:15
moyanming2013 发表于 2017-8-29 20:44
1.别忘了重定位向量表。
2.参考STM32CUBE示例程序,你相信ST官方还是小作坊? ...

我重新设置了中断向量表的SCB->VTOR = FLASH_BASE | 0x10000;
wt13568089592 回答时间:2017-8-30 17:01:59
freeelectron 发表于 2017-8-30 09:15
1、首先要确认是跳转了没成功,还是没跳转?
2、跳转之后要重新设置堆栈
3、跳转之前要关闭中断,同时要检 ...

跳转了,app没运行
wt13568089592 回答时间:2017-8-30 17:03:05
freeelectron 发表于 2017-8-30 09:15
1、首先要确认是跳转了没成功,还是没跳转?
2、跳转之后要重新设置堆栈
3、跳转之前要关闭中断,同时要检 ...

__asm void INTX_DISABLE()
{
        CPSID   I
        BX      LR          
}
//开启所有中断
__asm void INTX_ENABLE(void)
{
        CPSIE   I
        BX      LR  
}
这样开关中断对不对?
moyanming2013 回答时间:2017-8-30 17:25:33
wt13568089592 发表于 2017-8-30 17:01
我重新设置了中断向量表的SCB->VTOR = FLASH_BASE | 0x10000;

编译出的固件(比如bin文件)没下载对。
对于IAP程序是从flash的第0扇区开始的位置,即是FLASH_BASE;对于APP程序,则需要修改为FLASH_BASE+0x10000。
如果使用MDK-ARM的话配置非常简单,每次配置完成后rebuild再下载或调试。或者添加item区分。
IAP项目时,配置start为flash起始地址,大小为合适的大小(我的大小是0x8000):
QQ截图20170830171917.jpg

APP项目时,配置配置start为flash合适的起始地址(我的是0x800C000),大小为合适的大小(我的大小是0xF4000):
QQ截图20170830172401.jpg


评分

参与人数 1ST金币 +5 收起 理由
zero99 + 5

查看全部评分

wt13568089592 回答时间:2017-8-31 10:50:05
moyanming2013 发表于 2017-8-30 17:25
编译出的固件(比如bin文件)没下载对。
对于IAP程序是从flash的第0扇区开始的位置,即是FLASH_BASE;对 ...

我设置好了的
虎饭11 回答时间:2017-9-19 17:03:50
哥们,请问你解决了吗?我和你遇到同样的问题,只不过我的是F429的,可以扣扣交流下吗?我的是191920965
搬砖工 回答时间:2017-9-20 15:00:52
持续关注中,我也遇到这个问题了
技术范儿 回答时间:2018-4-12 16:02:37
确定几个问题:
1.是否跳转成功
2.是否是因为应用程序产生中断而产生的重启
对于1问题加个打印看看是否跳进去,另外程序写进的格式是否正确,对于问题2如果由于应用程序中断产生重启,要改你代码的中断向量表位置,如图所示
QQ截图20180412155859.png

所属标签

相似问题

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