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

stm32f030ccIAP升级

[复制链接]
yufanjoy 提问时间:2018-8-1 20:00 /
大家好!

最近在调试stm32f030串口升级功能,分别测试IAP代码和APP代码都能正常工作,
IAP的跳转代码如下:
  1. void Restart ( void )
  2. {
  3.     jump reboot;
  4.     __set_MSP ( * ( volatile uint32_t * ) 0x08000000 );
  5.     reboot = ( jump ) * ( volatile uint32_t * ) 0x08000004;
  6.     reboot();
  7. }

  8. void AppJump ( void )
  9. {
  10.     jump appjump;
  11.     __set_MSP ( * ( volatile uint32_t* ) APP1_IMG_BEG_ADDRESS );
  12.     appjump = ( jump ) * ( volatile uint32_t * ) ( APP1_IMG_BEG_ADDRESS + 4 );  
  13.     appjump();

  14. }
复制代码
我在IAP代码里面测试这两个跳转代码,Restart函数可以让IAP正常复位,所以推测AppJump函数应该也是可以正常跳转的;

另外再APP代码里面我添加了如下中断向量重映射代码:
  1. void VectorTableRemap ( void )
  2. {
  3.     uint32_t i = 0;

  4.     /* Relocate by software the vector table to the internal SRAM at 0x20000000 ***/

  5.     /* Copy the vector table from the Flash (mapped at the base of the application
  6.        load address APP_IMAG_LOCATION) to the base address of the SRAM at 0x20000000. */
  7.     for ( i = 0; i < 48; i++ )
  8.     {
  9.         VectorTable[i] = * ( volatile uint32_t* ) ( APP1_IMG_BEG_ADDRESS + ( i << 2 ) );
  10.     }

  11.     /* Enable the SYSCFG peripheral clock*/
  12.     __HAL_RCC_SYSCFG_CLK_ENABLE();

  13.     /* Remap SRAM at 0x00000000 */
  14.     __HAL_SYSCFG_REMAPMEMORY_SRAM();
  15. }
复制代码
现在在联调的时候发现,IAP升级的时候APP不能工作,按照帖子前面几步测试的结果,IAP是正常跳转到APP的,但是APP没起来,推测是重映射出问题,所以单独运行APP代码,并将重映射修改如下:
  1. void VectorTableRemap ( void )
  2. {
  3.     uint32_t i = 0;

  4.     /* Relocate by software the vector table to the internal SRAM at 0x20000000 ***/

  5.     /* Copy the vector table from the Flash (mapped at the base of the application
  6.        load address APP_IMAG_LOCATION) to the base address of the SRAM at 0x20000000. */
  7.     for ( i = 0; i < 48; i++ )
  8.     {
  9. VectorTable[i] = * ( volatile uint32_t* ) ( 0x08000000 + ( i << 2 ) );
  10.     }

  11.     /* Enable the SYSCFG peripheral clock*/
  12.     __HAL_RCC_SYSCFG_CLK_ENABLE();

  13.     /* Remap SRAM at 0x00000000 */
  14.     __HAL_SYSCFG_REMAPMEMORY_SRAM();
  15. }
复制代码
测试发现APP代码可以正常运行,这样推测重映射也是没问题的,所以现在不清楚到底是哪里出了问题,希望了解细节的朋友指点一二,谢谢!!!
收藏 1 评论8 发布时间:2018-8-1 20:00

举报

8个回答
仙景 回答时间:2018-8-1 21:02:49
IAR直接调试就知道了,不行就用printf调试一下就知道跳到哪里了,说不定死了,跳转制定地址运行就类似调到main函数一样

评分

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

查看全部评分

feixiang20 回答时间:2018-8-2 01:52:30
从app跳转回iap可以用软件复位,尝试修改,看看中断是否过多,逐行推断

评分

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

查看全部评分

随风飘扬 回答时间:2018-8-2 08:50:26
除了程序里面,链接文件里的相关地址也需要修改,不知道你有没有修改正确

评分

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

查看全部评分

yufanjoy 回答时间:2018-8-2 11:56:38
yu0405jie 发表于 2018-8-2 08:50
除了程序里面,链接文件里的相关地址也需要修改,不知道你有没有修改正确 ...

忘了修改中断表地址了,现在IAP可以跳到APP,并且正常运行,但是APP跳回IAP不行,可以跳到IAP,但是IAP运行死机,推测是中断的问题,可是我已经把APP的中断关了。
废鱼 回答时间:2018-8-2 14:24:54
APP的中断要全部关闭。如果IAP有部分中断未使用,比如ADC,TIME,这些一般IAP用不到。就会导致发生复位。

评分

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

查看全部评分

ssssss 回答时间:2018-8-3 09:29:05
楼主没说清楚问题,可以正常跳转为何 app会起不来?

评分

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

查看全部评分

随风飘扬 回答时间:2018-8-3 10:17:17
yufanjoy 发表于 2018-8-2 11:56
忘了修改中断表地址了,现在IAP可以跳到APP,并且正常运行,但是APP跳回IAP不行,可以跳到IAP,但是IAP运 ...

我觉得仅仅关闭中断还是不行,在IAP里面可能会无意打开,最好把APP里用到的外设恢复到复位状态,假装单片机进行了一次复位操作在调到IAP,另外IAP里面的中断表地址也需要修改

评分

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

查看全部评分

wenkumk 回答时间:2020-6-10 14:57:49
我遇到的问题和你的一样,app跳回iap程序起不来,请问您是怎么解决的呢

所属标签

相似问题

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