我用之前
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跳转了,但是启动不起来,是不是还有哪个开关没开启,期待高手指点迷津,感谢感谢。