请问为什么FLASH擦除后不能写

2019-07-20 05:29发布

[mw_shl_code=c,true] if(number<12) { FLASH_Unlock(); FLASH_DataCacheCmd(DISABLE);//FLASH擦除期间,必须禁止数据缓存 //FLASH_EraseSector(STMFLASH_GetFlashSector(0x08040000+number*0x800),VoltageRange_3);//VCC=2.7~3.6V之间!! for(temp=0;temp<1024;temp++) { appoint_address=0x08040000+number*0x800+temp*2; wait_write=prog_write_buffer[temp*2]+prog_write_buffer[temp*2+1]*0X100; FLASH_ProgramHalfWord(appoint_address,wait_write); } FLASH_DataCacheCmd(ENABLE); //FLASH擦除结束,开启数据缓存 FLASH_Lock(); } }[/mw_shl_code] [mw_shl_code=c,true]请问为什么FLASH擦除后不能写[/mw_shl_code] [mw_shl_code=c,true]0x08040000初始化为0xFFFF注释擦除代码就可以写,不注释擦除代码就不能写了[/mw_shl_code]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
逆行者
1楼-- · 2019-07-20 10:55
 精彩回答 2  元偷偷看……
北极圈的黄昏
2楼-- · 2019-07-20 11:47
 精彩回答 2  元偷偷看……
逆行者
3楼-- · 2019-07-20 17:21
[mw_shl_code=c,true]都擦了就是写不进,初始化为0xFFFF,但不擦除就可以写,擦了就不能写了[/mw_shl_code] [mw_shl_code=c,true]void write_block(u16 number) {u16 temp,wait_write; u32 appoint_address; if(number<12) { FLASH_Unlock(); FLASH_DataCacheCmd(DISABLE);//FLASH擦除期间,必须禁止数据缓存 FLASH_EraseSector(STMFLASH_GetFlashSector(flash_start_address+number*0x800),VoltageRange_3);//VCC=2.7~3.6V之间!! for(temp=0;temp<1024;temp++) { appoint_address=flash_start_address+number*0x800+temp*2; wait_write=prog_write_buffer[temp*2]+prog_write_buffer[temp*2+1]*0X100; FLASH_ProgramHalfWord(appoint_address,wait_write); } FLASH_DataCacheCmd(ENABLE); //FLASH擦除结束,开启数据缓存 FLASH_Lock(); } }[/mw_shl_code]


逆行者
4楼-- · 2019-07-20 19:52
 精彩回答 2  元偷偷看……
逆行者
5楼-- · 2019-07-20 20:59
Program Size: Code=71060 RO-data=64260 RW-data=216 ZI-data=54468     F103的
Program Size: Code=69936 RO-data=64328 RW-data=208 ZI-data=54476      F407的
晕了,,编译后F103的代码还多些都不会擦掉
herdboy77
6楼-- · 2019-07-20 21:41
时隔3年了,我用的F1也遇到和楼主类似的问题,后面我在for循环里面  写入数据之前添加了一句给flash解锁的语句后,就成功了。
也不知道是什么原因,虽然在进入子函数就解锁了,不知道为什么非要在这里再加一句解锁。

一周热门 更多>