我用之前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跳转了,但是启动不起来,是不是还有哪个开关没开启,期待高手指点迷津,感谢感谢。 |
KEIL的配置的地范围有沒有忘記,如果没有改的话,生成的代码起始地址还是从头开始的 |
在线仿真,跳到app什么情况 |
adc采集电压
关于使用STM32G030C8T6的串口收发过程中串口接收问题
STM32G0B1的CAN自动重发
用stm32cubeide生成的STM32G030F6P6代码只要一开中断,任何中断程序都会跑飞.
STM32G0B1CBT6 双Bank升级,运行Bank2上Flash不能写问题
有关STM32G0B1RET6芯片FLASH擦除问题
STM32G030烧录程序
Stm32G071 i2c slave配置问题
STM32G030 不能下载程序 0xFFFF0040
STM32G0是否支持trace?