根据STM32F103RBT6单片机的逻辑而来,在IAP中
#define OPTIONT_DATADDR 0x0801FC00
#define ApplicationAddress 0x08003000
__disable_irq();NVIC->ICER[0] = 0xFFFFFFFF;
SCB->VTOR = 0x08000000;
SCB->AIRCR = 0xFA050700;
AppInf_TypeDef *AppInformaton = (AppInf_TypeDef*)OPTIONT_DATADDR;
if(AppInformaton->UpgradeFlag == 1 || AppInformaton->UpgradeFlag == 0xffffffff)
{
if (((*(__IO uint32_t*)ApplicationAddress) & 0x2FFE0000 ) == 0x20000000)
{
Jump_to_application();
}
}
APP中:
__disable_irq();
NVIC->ICER[0] = 0xFFFFFFFF;
SCB->VTOR = 0x08003000;
SCB->AIRCR = 0xFA050700;
....初始化时钟、串口、ADC、三个定时器。。等等,然后显示、蜂鸣器鸣叫。。进入while(1);
用Jlink仿真可以正常运行,拔掉Jlink后按复位按键可以正常运行,但是掉电再上电进入APP后,蜂鸣器不叫了,但是居然能到while(1)里的显示处理。。。然后就卡机,按键不好用了。。。
请问是什么问题?应用层的逻辑代码在STM32上没问题,正常跑,移植到GD32上就这个熊样了,底层驱动就是根据GD的Fw库的例程改的 |