2550|3

6

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

STM32Flash擦出和编写 [复制链接]

对于STM32的flash地址不是太明白。。。求解答。。我应该怎么擦出和编写呢?我能从0x8002000开始擦出吗?我需要写入大概2000个。
此帖出自stm32/stm8论坛

最新回复

/************************************************************************************** * FunctionName   : FLSEraseFlash() * Description    : Flash擦除 * EntryParameter : sAddr - 起始地址,eAddr - 结束地址,pageSize - 页大小 * ReturnValue    : None **************************************************************************************/ void FLSEraseFlash(u32 sAddr, u32 eAddr, u32 pageSize) {     u8 i, maxPag;     volatile FLASH_Status fshStu = FLASH_COMPLETE;         maxPag = (eAddr - sAddr) / pageSize;                                        // 页数     FLASH_Unlock();                                                             // 解锁的闪存程序擦除控制器     FLASH_ClearFlag(FLASH_FLAG_BSY | FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);         for (i=0; ((i  详情 回复 发表于 2013-7-18 11:28

点评

可以擦除,但必须以块为单位,不同型号块的大小不同,需要查资料。  详情 回复 发表于 2013-7-18 11:26
点赞 关注
 

回复
举报

103

帖子

1

TA的资源

一粒金砂(中级)

沙发
 
  应该是有捷径的,2000个咋弄
此帖出自stm32/stm8论坛
 
 

回复

4996

帖子

19

TA的资源

裸片初长成(初级)

板凳
 

回复 楼主yi41710 的帖子

可以擦除,但必须以块为单位,不同型号块的大小不同,需要查资料。
此帖出自stm32/stm8论坛
 
个人签名我的博客
 

回复

4996

帖子

19

TA的资源

裸片初长成(初级)

4
 
  1. /**************************************************************************************
  2. * FunctionName   : FLSEraseFlash()
  3. * Description    : Flash擦除
  4. * EntryParameter : sAddr - 起始地址,eAddr - 结束地址,pageSize - 页大小
  5. * ReturnValue    : None
  6. **************************************************************************************/
  7. void FLSEraseFlash(u32 sAddr, u32 eAddr, u32 pageSize)
  8. {
  9.     u8 i, maxPag;
  10.     volatile FLASH_Status fshStu = FLASH_COMPLETE;
  11.    
  12.     maxPag = (eAddr - sAddr) / pageSize;                                        // 页数
  13.     FLASH_Unlock();                                                             // 解锁的闪存程序擦除控制器
  14.     FLASH_ClearFlag(FLASH_FLAG_BSY | FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);
  15.    
  16.     for (i=0; ((i
  17.     {
  18.         fshStu = FLASH_ErasePage(sAddr + (pageSize * i));                       // 擦除FLASH页
  19.     }
  20.    
  21.     FLASH_Lock();                                                               // 锁Flash
  22. }
复制代码
  1. /**************************************************************************************
  2. * FunctionName   : FLSWriteFlash()
  3. * Description    : 写Flash
  4. * EntryParameter : wrtAddr - 写地址,pDat - 数据,len - 数据长度
  5. * ReturnValue    : 成功返回0,否则返回1
  6. **************************************************************************************/
  7. u8 FLSWriteFlash(u32 wrtAddr, u8 *pDat, u32 len)
  8. {
  9.     u8  times = 0;
  10.     u16 i;
  11.     u32 wrtDat = 0, reaDat = 0;                                                 // 读写缓冲
  12.     u32 addr = wrtAddr;
  13.    
  14.     FLASH_Unlock();                                                             // 解锁的闪存程序擦除控制器
  15.     for (i=0; i
  16.     {
  17.         wrtDat = (pDat[i+0]<<0) + (pDat[i+1]<<8) + (pDat[i+2]<<16) + (pDat[i+3]<<24);                           
  18.         
  19.         do
  20.         {
  21.             times++;
  22.             FLASH_ProgramWord(addr, wrtDat);                                    // 写Flash
  23.             reaDat = FLSReadDword(addr);                                        // 读Flash
  24.             
  25.         } while ((reaDat != wrtDat) && (times < 5));
  26.         
  27.         if (times == 0)                                                         // 读写错误
  28.         {
  29.             FLASH_Lock();                                                       // 锁Flash
  30.             return 1;
  31.         }
  32.         
  33.         times = 0;
  34.         addr += 4;                                                              // 偏移地址
  35.     }
  36.    
  37.     FLASH_Lock();                                                               // 锁Flash
  38.     return 0;
  39. }
复制代码
此帖出自stm32/stm8论坛
 
个人签名我的博客
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表