注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

深海精灵

水里的一滴油,透明地飘零在空气中。。。

 
 
 

日志

 
 
关于我

神秘诡谲,令人费解。可以很执着,也可以很破坏。冰冷,沉默。渴望单纯,渴望自由。躲在文字的背后,用心聆听世界,用直觉洞察世情。

网易考拉推荐

STM32的FLASH简单应用  

2011-10-14 17:27:57|  分类: Cortex-M3 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

  STM3210XXX内嵌的闪存存储器可以用于在线编程(ICP)或在程序中编程(IAP)。也可以作为闪存存放数据。

  主存储块:小容量产品 4K×64位
       中容量产品 16K×64位
       大容量产品 64K×64位

  信息块: 258×64位

闪存模块组织织:

STM32的FLASH简单应用 - 深海精灵 - 深海精灵
中容量(每页1K)和大容量(每页2K)的参照数据手册。
  闪存存储器被组织成32位宽的存储器单元,可以存放代码和数据常数。每一个闪存模块都有一个特定的启始地址。
 
  此次测试目的在于利用闪存存储器存放数据,并不是实现程序烧录功能,所以,只关注存储器的读写,保护功能留待日后再研究。
  下面的例子是从0x08008204的地址中读取数据dat,把数据通过串口发送到终端查看,然后修改该地址的数据,再送到终端查看,对照前后两次的数据是否与预期值相符。先看例子:
  uint32_t addr = 0x08008204;   // 地址
  uint32_t dat;
  FLASH_Unlock();        // 解除闪存锁
  dat = *(uint32_t *)addr;     // 读指定地址的数据
  send_data(dat);        // 把数据送到串口
 
  dat+=0x10;
  FLASH_ErasePage(0x08008000);  // 擦除页,输入页起始地址
  
  FLASH_ProgramWord(addr,dat); // 对指定地址写数据
  dat = *(uint32_t *)addr;
  FLASH_EnableWriteProtection(FLASH_WRProt_Pages32to35);   // 对页32写保护,有这一句下次就写不入了
  FLASH_Lock();         // 锁住闪存
  send_data(dat);         // 前后数据对照
 
  分析:
  本例子基于64K的中容量产品,每页是1K字节,0x08008204属于第32页。关于FLASH_ErasePage函数的输入值,只要是第32页内的地址都可以。
  要注意的是,闪存在写数据前必须先进行擦除,而且只能页擦除,不能单字节擦除。至于为什么,查看闪存的内部结构,这里不多说。
  评论这张
 
阅读(1172)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017