找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3656|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

STM32-FLASH讀寫

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:104126 發(fā)表于 2016-1-23 00:45 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
stm32寫flash時(shí)候,注意必須是4字節(jié)對(duì)齊,這跟它的內(nèi)部接口是有關(guān)的。

最近在學(xué)STM32,要用到內(nèi)部flash存點(diǎn)數(shù)據(jù),一開始在網(wǎng)上看了很多例程,自己寫了一個(gè),當(dāng)?shù)絾纹瑱C(jī)中,一點(diǎn)反應(yīng)沒有,于是又到網(wǎng)上看了又看,找啊找,發(fā)現(xiàn)這樣的讀寫內(nèi)部flash的軟件不多,而且說的也不是很明確(個(gè)人觀點(diǎn)),特地總結(jié)了一下,希望對(duì)剛學(xué)STM32的小伙伴有幫助。
注意:寫數(shù)據(jù)的地址(紅色字),如果你的boot1=x,boot0=0,那么你的啟動(dòng)模式是用戶閃存存儲(chǔ)器,而這個(gè)用戶閃存存儲(chǔ)器的地址就是0x08000000。這個(gè)很重要。。。!我用的是STM32F103VET6,下面是寫內(nèi)部flash的子程序: #include "flash.h"
#define  STARTADDR 0x0807F800   //主存儲(chǔ)器第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();
}





函數(shù)調(diào)用:例:u8  Temp_Data[4] = { 0};
WriteFlashOneWord( 0 , 0x12345678 );delay_ms(10);
            ReadFlashNBtye( 0 , Temp_Data , 4 );            delay_ms(10);
這樣數(shù)據(jù)就寫入了內(nèi)部flash,讀出時(shí)就放在了Temp_Data[4]中。


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表