本帖最后由 tkyl01 于 2016-1-7 15:29 编辑
MCU:STM32F415RG
最近在做 蓝牙IAP,在写入flash代码时遇到了问题
这个片子的内部flash的 扇区也太大了,读写都有点不方便了。
IAP程序写好后,连接上串口把程序下载到片子,发现没反应,后来就把flash APP区的代码读取了回来发现 与原程序代码 对应不上,两头都对,中间一截数据却莫名奇妙的不对应,上图……
向flash 写数据 代码:
void StmFlashWrite(u32 WriteAddr,u32 *pBuffer,u32 NumToWrite)
{
FLASH_Status status = FLASH_COMPLETE;
u32 addrx = 0;
u32 endaddr = 0;
if((WriteAddr < STM32_FLASH_BASE) || (WriteAddr%4)) return; //非法地址
FLASH_Unlock(); //解锁
FLASH_DataCacheCmd(DISABLE); //FLASH擦除期间,必须禁止数据缓存
addrx = WriteAddr; //写入的起始地址
endaddr = WriteAddr + NumToWrite*4; //写入的结束地址
if(addrx < 0X1FFF0000) //只有主存储区,才需要执行擦除操作!!
{
while(addrx < endaddr) //扫清一切障碍.(对非FFFFFFFF的地方,先擦除)
{
if(StmFlashReadWord(addrx) != 0XFFFFFFFF)//有非0XFFFFFFFF的地方,要擦除这个扇区
{
status = FLASH_EraseSector(StmFlashGetSector(addrx),VoltageRange_3);//VCC=2.7~3.6V之间!!
if(status != FLASH_COMPLETE) break; //发生错误了
}
else addrx += 4;
}
}
if(status == FLASH_COMPLETE)
{
while(WriteAddr < endaddr)//写数据
{
if(FLASH_ProgramWord(WriteAddr,*pBuffer) != FLASH_COMPLETE)//写入数据
{
break; //写入异常
}
WriteAddr += 4;
pBuffer ++;
}
}
FLASH_DataCacheCmd(ENABLE); //FLASH擦除结束,开启数据缓存
FLASH_Lock();//上锁
}
求助 大家 帮忙分析一下
程序 bin.rar
(538.5 KB)
|