找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3701|回复: 0
打印 上一主题 下一主题
收起左侧

STM32-FLASH读写

[复制链接]
跳转到指定楼层
楼主
ID:104126 发表于 2016-1-23 00:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
stm32写flash时候,注意必须是4字节对齐,这跟它的内部接口是有关的。

最近在学STM32,要用到内部flash存点数据,一开始在网上看了很多例程,自己写了一个,当到单片机中,一点反应没有,于是又到网上看了又看,找啊找,发现这样的读写内部flash的软件不多,而且说的也不是很明确(个人观点),特地总结了一下,希望对刚学STM32的小伙伴有帮助。
注意:写数据的地址(红色字),如果你的boot1=x,boot0=0,那么你的启动模式是用户闪存存储器,而这个用户闪存存储器的地址就是0x08000000。这个很重要!!!!!我用的是STM32F103VET6,下面是写内部flash的子程序: #include "flash.h"
#define  STARTADDR 0x0807F800   //主存储器第255页首地址           volatileFLASH_Status FLASHStatus = FLASH_COMPLETE;      
void ReadFlashNBtye(uint32_t ReadAddress, uint8_t *ReadBuf,int32_t ReadNum)  {  int DataNum= 0;  ReadAddress = (uint32_t)STARTADDR +ReadAddress;   while(DataNum < ReadNum)  {   *(ReadBuf + DataNum) =*(__IO uint8_t*) ReadAddress++;   DataNum++; }
// return DataNum; }  
void WriteFlashOneWord(uint32_t WriteAddress,uint32_tWriteData) { FLASH_Unlock();
  FLASH_ClearFlag(FLASH_FLAG_BSY |FLASH_FLAG_EOP | FLASH_FLAG_PGERR |
FLASH_FLAG_WRPRTERR);   FLASHStatus = FLASH_ErasePage(STARTADDR);//擦除一页 FLASH_EraseAllPages():擦除全
// 部 FLASH 页面   if(FLASHStatus ==FLASH_COMPLETE)  {   FLASHStatus= FLASH_ProgramWord(STARTADDR + WriteAddress, WriteData);    }
FLASH_Lock();
}





函数调用:例:u8  Temp_Data[4] = { 0};
WriteFlashOneWord( 0 , 0x12345678 );delay_ms(10);
            ReadFlashNBtye( 0 , Temp_Data , 4 );            delay_ms(10);
这样数据就写入了内部flash,读出时就放在了Temp_Data[4]中。


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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