OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7304|回复: 2

STM32读写内部flash的问题(急求啊,原子哥,谢谢了啊)

[复制链接]

6

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
65
金钱
65
注册时间
2013-4-28
在线时间
0 小时
发表于 2013-8-22 14:00:48 | 显示全部楼层 |阅读模式
void STMFLASH_Write(u32 WriteAddr,u16 *pBuffer,u16 NumToWrite)
{
u32 secpos;    //???????·
u16 secoff;    //?????????????·(16??×?????)
u16 secremain; //?????????à???·(16??×?????)    
  u16 i;    
u32 offaddr;   //????0X08000000?ó?????·
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; //???????·  0~127 for STM32F103RBT6
secoff=(offaddr%STM_SECTOR_SIZE)/2; //??????????????(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;   
}
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++; //???????·??1
secoff=0; //??????????0   
    pBuffer+=secremain;   //????????
WriteAddr+=secremain; //?????·????    
    NumToWrite-=secremain; //×???(16??)??????
if(NumToWrite>(STM_SECTOR_SIZE/2))secremain=STM_SECTOR_SIZE/2;//???????????????????ê
else secremain=NumToWrite;//?????????????????ê??
}  
};
FLASH_Lock();//????
}

STMFLASH_Write(FLASH_SAVE_ADDR,(u16*)&power,1);//xiu
FLASH_SAVE_ADDR=FLASH_SAVE_ADDR +2;//4 
这样写入内部flash函数的调用,是不是可以不断写入内部flash啊,不管是哪一页,只要这个FLASH_SAVE_ADDR地址的值是多少,就能写入那个页地址里面啊。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

23

主题

76

帖子

0

精华

初级会员

Rank: 2

积分
193
金钱
193
注册时间
2012-11-2
在线时间
1 小时
发表于 2013-8-22 14:06:09 | 显示全部楼层
我觉得你想问的是不是万一FLASH有写保护,是不是就不能这么操作了?
我也有点不明白,感觉应该先测试一下这些页是否有写保护,如果有的话,先失能写保护
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-8-22 14:15:09 | 显示全部楼层
回复【楼主位】hwh123:
---------------------------------
是的。
WriteAddr+=secremain;              //?????·????
有个bug,改为:
WriteAddr+=secremain*2; //?????·????
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-17 01:22

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表