FLASH写问题

2019-08-17 06:28发布

用107VC进行IAP在线升级,上位机每次发1000个字节,直到把整个APP代码发送完成,我能够接收一次就写一次flash,然后下一次再接收1000个字节,再写一次flash么?void STMFLASH_Write(u32 WriteAddr,u16 *pBuffer,u16 NumToWrite)       
{
        u32 secpos;          
        u16 secoff;         
        u16 secremain;
        u16 i;   
        u32 offaddr;
       
        if(WriteAddr<STM32_FLASH_BASE||(WriteAddr>=(STM32_FLASH_BASE+1024*STM32_FLASH_SIZE)))return;
        FLASH_Unlock();                                               
        offaddr=WriteAddr-STM32_FLASH_BASE;               
        secpos=offaddr/STM_SECTOR_SIZE;                       
        secoff=(offaddr%STM_SECTOR_SIZE)/2;               
        secremain=STM_SECTOR_SIZE/2-secoff;               
        if(NumToWrite<=secremain)secremain=NumToWrite;
        while(1)
        {       
                STMFLASH_Read(secpos*STM_SECTOR_SIZE+STM32_FLASH_BASE,STMFLASH_BUF,STM_SECTOR_SIZE/2);
                for(i=0;i<secremain;i++)
                {
                        if(STMFLASH_BUF[secoff+i]!=0XFFFF)break;
                }
                if(i<secremain)
                {
                        FLASH_ErasePage(secpos*STM_SECTOR_SIZE+STM32_FLASH_BASE);
                        for(i=0;i<secremain;i++)
                        {
                                STMFLASH_BUF[i+secoff]=pBuffer[i];          
                        }
                        STMFLASH_Write_NoCheck(secpos*STM_SECTOR_SIZE+STM32_FLASH_BASE,STMFLASH_BUF,STM_SECTOR_SIZE/2);
                }else STMFLASH_Write_NoCheck(WriteAddr,pBuffer,secremain);          
                if(NumToWrite==secremain)break;
                else
                {
                        secpos++;                               
                        secoff=0;                               
                        pBuffer+=secremain;         
                        WriteAddr+=secremain*2;       
                        NumToWrite-=secremain;
                        if(NumToWrite>(STM_SECTOR_SIZE/2))secremain=STM_SECTOR_SIZE/2;
                        else secremain=NumToWrite;
                }         
        };       
        FLASH_Lock();
}


我定义了一个u8 RX_BUF【1000】用来接收每次传过来的1000个字节,但每次发送完之后都无法运行APP程序。写地址是iap_write_appbin((FLASH_APP1_ADDR+(cishu*1000)),RX_BUF,recvlen);
cishu为接收次数,接收一次就加1,目测是写flash出错了,但是没找到原因。
请大神指点迷津。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。