GD32F103RBT6的IAP问题

[复制链接]
2406|4
手机看帖
扫描二维码
随时随地手机跟帖
泉东发展电子|  楼主 | 2018-6-5 17:09 | 显示全部楼层 |阅读模式
根据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库的例程改的
泉东发展电子|  楼主 | 2018-6-5 17:10 | 显示全部楼层
自己先顶一下。。。

使用特权

评论回复
泉东发展电子|  楼主 | 2018-6-5 17:35 | 显示全部楼层
IAP的:
int main(void)
{
        uint8_t errCode = 0;
        __disable_irq();
        SystemClockInit();
        NVIC->ICER[0] = 0xFFFFFFFF;
        nvic_vector_table_set(NVIC_VECTTAB_FLASH,0x0000);
        IAPInit();
        RS485UsartInit();
        GprsInit(&GprsDataStruct);
        LcdGPIOInit();
        LedInit();
#if NORFLASH
        errCode = NorFlashInit();
#endif
        SysTick_Init();
        /************************************************/
//        /* 配置独立看门狗 */
        fwdgt_config(0x0FFE,FWDGT_PSC_DIV128);//6.5504i
        fwdgt_enable();
        /************************************************/
        __enable_irq();
  /* Infinite loop */
        while (1)
        {
                fwdgt_counter_reload();     /* 重载看门狗计数器 */
                IapTimeoutProcess();
                IapRunFlicker();
                GprsDataProcess(&GprsDataStruct,&errCode);
                RefreshProgram(*((AppInf_TypeDef*)OPTIONT_DATADDR));
                Rs485DataProcess(&UsartDataStruct);
        }
}
APP 的程序:
ErrStatus        NorFlashInitStatus;
int main(void)
{
        __disable_irq();
        NVIC->ICER[0] = 0xFFFFFFFF;
        nvic_vector_table_set(NVIC_VECTTAB_FLASH,0x3000);
        SystemClockInit();
        SimInit(0);
        SetDataInit();
        RS485UsartInit();
        AdcInit();
        Timer1Init();
        Timer2Init();
        Timer3Init();
        KeyInit();
        LcdGPIOInit();
        LcdInit();
        LcdReset();
        LedInit();
        RelayInit();
        Hc4051Init();
        LcdSetPixels(0xFF,0xFF);
        BeepInit();
        Delay(0x7FFFFF);
        LcdClear();
        DisplayCompany**();
        Delay(0xFFFFFF);
        LcdClear();
        LedYellowOff();
        LedRedOff();
        BeepOff();
        LedRedOff();
        SysTick_Init();
        Hc4051OperProcess(&Hc4051OperStruct);
        NorFlashInitStatus = NorFlashInit();
        /************************************************/
        fwdgt_config(0x0FFE,FWDGT_PSC_DIV128);//6.5504ī
        fwdgt_enable();
        /************************************************/
        __enable_irq();
    DisplayStateStruct.LcdBklTicks = 60;
        if(SetValueStruct.DeviceType == JFDTD_R4)
        {
                SetValueStruct.SensorShieldFlag |= 0x8780;//0b1000011110000000
        }

  /* Infinite loop */
        while (1)
        {
                fwdgt_counter_reload();     /* ט՘ߴąٷ݆˽Ƿ */
                ModBusPackProcess(&ComDataPackStruct);
                SimProc(0);
                LedFlagProcess(&LedFlagStruct);
                DisplayStateProcess(&DisplayStateStruct);
                DisplayProcess(&DisplayStateStruct);
                FlashOperFlagProcess(&FlashOperFlagStruct);
                Hc4051OperProcess(&Hc4051OperStruct);
                AdcDataProcess(&AdcDataStruct);
                KeyScanLoop(&KeyDataStruct);
                KeyValueProcess(&KeyDataStruct);
                BeepProcess(&BeepFlagStruct);
                RelayOperateProcess(&RelayOperateStruct);
                LoRaDataProcess(&LoRaComDataStruct);
                UpdateFlagProcess(&UpdateFlagStruct);
        }
}

显示出现应该是之前的缓存里的数据,掉电上电后蜂鸣器都不叫了(之前Jlink仿真的时候会叫)

使用特权

评论回复
vibra2016| | 2018-6-11 21:50 | 显示全部楼层
初始化的设计还是蛮重要的

使用特权

评论回复
labasi| | 2018-6-12 08:29 | 显示全部楼层
楼主先把不用的给屏蔽掉 试试好使不好使

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

4

帖子

0

粉丝