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

STM32G030 IAP 跳转不启动

[复制链接]
hhccxw 提问时间:2022-8-20 10:42 / 未解决
我用之前STM32F103的YModem升级代码,移植到STM32G030后,发现可以跳转,但启动不成功,是否有人碰到同样的问题,帮忙指点迷津,具体如下:
1:BootLoader的Keil C 跳转代码。
/****************************************** 以下为BootLoader跳转代码 **************************************/
void CloseIQHard(void)
{

        LL_GPIO_DeInit(GPIOA);

        LL_IOP_GRP1_DisableClock(LL_IOP_GRP1_PERIPH_GPIOA);                 
        LL_APB2_GRP1_ForceReset(LL_APB2_GRP1_PERIPH_USART1);
               
                LL_TIM_DisableIT_UPDATE(TIM3);
                  LL_TIM_DisableCounter(TIM3);

                //LL_SYSTICK_DisableIT();
               
              __set_PRIMASK(1);
        __disable_irq();   // 关闭总中断

}

void BootloaderJumpToApp( void )
{  

        u32 JumpAddress;
               
    CloseIQHard();
            
     if(((*(volatile uint32_t*)FLASH_APP_START_ADDRESS)&0x2FFE0000) == 0x20000000)                //检查栈顶地址是否合法.
         {
                 __set_CONTROL(0);                      //特权模式
                       __ASM("CPSID  I");                     //关中断
                                                         
                 JumpAddress = *(volatile uint32_t*)(FLASH_APP_START_ADDRESS+4);        //用户代码区第二个字为程序开始地址(复位地址)  
                        JumpToApp = (IapFunction)JumpAddress;       
                                                                                                         
                        __set_MSP(*(volatile uint32_t*)FLASH_APP_START_ADDRESS);        //初始化APP堆栈指针(用户代码区的第一个字用于存放栈顶地址)                 
                               
                JumpToApp();                                                         //跳转到APP.
         }
         else
                 Error_Handler();
}

BootLoader代码的Keil C设置如下



2: 固件APP的启动部分代码,配置成从内部Flash启动,启动后Flash闪灯。

#define VECT_TAB_OFFSET  0x3000U

void SystemInit(void)
{
  /* Configure the Vector Table location add offset address ------------------*/
#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
}


int main(void)
{
        __enable_irq();
        SystemInit();
       
          LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_SYSCFG);
          LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_PWR);  
          NVIC_SetPriority(SysTick_IRQn, 2);
          SystemClock_Config();

        //以下省略其它代码
}

APP固件的Keil C设置如下





3: 通过ST-Link读取到0x0800300代码和文件的代码一致,如下图



文件的头部、中间、尾部都核对一致。

目前Boot跳转了,但是启动不起来,是不是还有哪个开关没开启,期待高手指点迷津,感谢感谢。

收藏 评论2 发布时间:2022-8-20 10:42

举报

2个回答
butterflyspring 回答时间:2022-8-22 14:44:09
KEIL的配置的地范围有沒有忘記,如果没有改的话,生成的代码起始地址还是从头开始的
STM32G0 IAP KEIL CONFIG.png
yklstudent 回答时间:2022-8-22 20:25:30
在线仿真,跳到app什么情况
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版