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

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个回答
liu553824989 回答时间: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

查看全部评分

yu0405jie 回答时间: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

查看全部评分

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

评分

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

查看全部评分

yu0405jie 回答时间: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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版