STM32F429的IAP升级问题(使用SD卡和FATFS)

2019-07-20 03:52发布


各位大神你们好:

我现在遇到的问题是:使用IAP升级,从大固件升级为小固件时,第一次运行成功,但是复位后就停在void HardFault_Handler(void)函数中。从小固件升级为大固件正常。

现象:
QQ图片20190212185220.png

小固件:
QQ截图20190212185530.png
if((t%20)==0)LED1=!LED1;
Program Size: Code=9502 RO-data=494 RW-data=44 ZI-data=2049980  

大固件:
QQ截图20190212185633.png
if((t%200000)==0)LED1=!LED1;
Program Size: Code=9506 RO-data=494 RW-data=44 ZI-data=2049980  

以下是IAP的代码:

int main(void)
{
        HAL_Init();                     //初始化HAL库   
        SysCLKInit_HSEPLL(180,25);                        //系统时钟初始化为180M
        HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);                //中断优先级分组
       
        Delay_Init(180);                //定时器初始化
        DEBUGInit();                                //初始化USART
        SDRAMInit();                                //初始化SDRAM
        printf("初始化完成. ");
        Delay_ms(3000);
       
        if(f_mount(&g_TF_FATFS,"0:",1) == FR_OK)
        {
                printf("挂载成功. ");
                if(TFCardReadBINFile() == 1)
                {
                        /*****读取新固件*****/
                        memset(g_ProcedureBUFF,255,sizeof(g_ProcedureBUFF));
                        FMC_SDRAM_WriteBuffer_8Bit(g_ProcedureBUFF,0,sizeof(g_ProcedureBUFF));
                        TFCardReadProcedure();
                       
                        /*****更新新固件*****/
                        g_applenth = sizeof(g_ProcedureBUFF);
                        printf("开始更新固件... ");       
                        iap_write_appbin(FLASH_APP1_ADDR,g_ProcedureBUFF,g_applenth);//更新FLASH代码   
                        printf("固件更新完成! ");
                }
               
                f_mount(0,"",0);                        //取消挂载
                printf("取消挂载. ");
        }
       
        printf("开始执行代码. ");
        iap_load_app(FLASH_APP1_ADDR);//执行FLASH APP代码
}



0条回答

一周热门 更多>