STM32F103C6T6 IAP程序flash按照1K写出错

2019-07-21 08:14发布

IAP程序地址0x08000000——0x08003000,APP程序地址0x08003000——0x08007000,IAP和APP分别用SWD烧写进去后IAP能够正常运行跳转,APP正常工作。但是在IAP模式下,通过IAP升级就出错了。分析问题出在IAP的FLASH烧写部分。因为APP程序14K左右,C6T6的SRAM只有10K。所以写了上位机每次1K1K的发送数据,对应的写flash程序修改如下:
u32 FlashAdd=0x08003000;
u8 count=0;
if((((*(vu32*)(0X20001000+4))&0xFF000000)==0x08000000)||(count!=0))
{iap_write_appbin(FlashAdd+count*1024,USART_RX_BUF,applenth);  
count++;

}

iap部分如下:
u16 iapbuf[512];  
void iap_write_appbin(u32 appxaddr,u8 *appbuf,u32 appsize)
{
        u16 t;
        u16 i=0;
        u16 temp;
        u32 fwaddr=appxaddr;
        u8 *dfu=appbuf;
        for(t=0;t<appsize;t+=2)
        {                                                    
                temp=(u16)dfu[1]<<8;
                temp+=(u16)dfu[0];          
                dfu+=2;//&#198;&#171;ò&#198;2&#184;&#246;×&#214;&#189;ú
                iapbuf[i++]=temp;            
                if(i==512)
                {
                        i=0;
                        STMFLASH_Write(fwaddr,iapbuf,512);       
                }
        }
        if(i)STMFLASH_Write(fwaddr,iapbuf,i);
}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。