各位专家大家好,请问有没有在GD32芯片上试过调用芯片的bootloader实现程序升级功能的,请指导。
我最近在GD32F470 上尝试调用芯片bootloader,发现并不能够成功,程序能掉跳转到0x1FFF0000地址,但不能给ISP软件回应。不是硬件的问题,因为我通过设置BOOT0、BOOT1引脚可以正确实现程序升级。
我的具体实现是在SystemInit()函数开始即跳转到bootloader区,代码如下:
void SystemInit (void)
{ uint32_t i;
pFunction JumpToApplication;
//--------------------------------------------------------------------------------
if (0x32f1 == RTC_BKP0)
{
rcu_periph_clock_enable(RCU_PMU);
pmu_backup_write_enable();
RTC_BKP0 = 0x1234;
__set_PRIMASK(1);
SysTick->CTRL = 0;
SysTick->LOAD = 0;
SysTick->VAL = 0;
/* 关闭所有中断,清除所有中断挂起标志 */
for (i = 0; i < 8; i++)
{
NVIC->ICER[i]=0xFFFFFFFF;
NVIC->ICPR[i]=0xFFFFFFFF;
}
/* 使能全局中断 */
__set_PRIMASK(0);
JumpToApplication = ((pFunction) (*(__IO uint32_t*) (0x1FFF0000 + 4)));
__set_MSP(*(__IO uint32_t*) 0x1FFF0000);
JumpToApplication();
}
//---------------------------------------------------------------------------------
......其他无关操作.........
|