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

IAP升级跳转 APP跳转Boot 失败

[复制链接]
jessenyung 提问时间:2025-6-27 19:42 / 未解决
使用的MCU是STM32U535RC ,V6 编译器

跳转实现的功能如下

  1. /**
  2. *@brief  直接跳转到 Boot 程序
  3. */
  4. void LibJumpToBoot(UINT32 BootAddr)
  5. {
  6.     static UINT32 JumpBootAddr = 0, sJumpToBootAddr = 0;

  7.     JumpBootAddr = BootAddr;

  8.     UINT32 CheckRamAddr = *(volatile UINT32*)(JumpBootAddr);

  9.     DEBUG("Check Ram Addr [0x%X], Flash Boot Addr [0x%X] \r\n", CheckRamAddr, JumpBootAddr);

  10.     MCU_DelayUnitms(200);

  11.     if ((CheckRamAddr & 0x2FF00000) == 0x20000000)
  12.     {
  13.         sJumpToBootAddr = *(volatile UINT32*)(JumpBootAddr + 4);

  14.         __disable_irq();

  15.         __HAL_RCC_APB1_FORCE_RESET();
  16.         __HAL_RCC_APB1_RELEASE_RESET();


  17.         for (UINT8 i = 0;i < 8;i++)//适用于中断编号是16~255
  18.         {
  19.             NVIC->ICER[i] = 0xFFFFFFFF;
  20.             NVIC->ICPR[i] = 0xFFFFFFFF;
  21.         }

  22.         SysTick->CTRL = 0x00;

  23.         SCB->VTOR = 0x08000000;

  24.         __set_CONTROL(0);

  25.         __set_PSP(*(volatile UINT32*)JumpBootAddr);
  26.         __set_MSP(*(volatile UINT32*)JumpBootAddr);


  27.         ((void (*)(void))sJumpToBootAddr)();

  28.         MCU_EnableIrq();

  29.         while (1);
  30.     }
  31.     else
  32.     {
  33.         DEBUG_ERR("Check Jump Boot Addr[0x%X] ! \r\n", CheckRamAddr);
  34.     }
  35. }
复制代码

这段代码在项目Keil工程中能够实现跳转,但是把这段代码由keil编成的lib, 项目工程中再使用此lib ,调用lib的接口函数却卡死,
项目工程和lib工程均没有开优化(-O0)



收藏 评论0 发布时间:2025-6-27 19:42

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版