日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]Flash的操作:stm32大容量的flash不僅用來存儲程序代碼,還可用來存儲一些數(shù)據(jù)和系統(tǒng)用戶的參數(shù)。程序的代碼一般保存在從flash開始區(qū)域,剩下的區(qū)域空間大小可以用來存儲用戶數(shù)據(jù)(大小取決于Flash的大小和代碼占用空

Flash的操作:

stm32大容量的flash不僅用來存儲程序代碼,還可用來存儲一些數(shù)據(jù)和系統(tǒng)用戶的參數(shù)。程序的代碼一般保存在從flash開始區(qū)域,剩下的區(qū)域空間大小可以用來存儲用戶數(shù)據(jù)(大小取決于Flash的大小和代碼占用空間的大小)。如果存儲的數(shù)據(jù)很少可以用最后一頁用于專門的存貯用戶數(shù)據(jù),這樣可以防止和程序代碼空間沖突。

1、STM32的Flash有讀寫次數(shù)和壽命的限制,所以不要放在循環(huán)中反復(fù)執(zhí)行讀寫操作。

2、FLASH的讀寫均需要時間,設(shè)置等待周期是為了確保正確的讀寫。因為cpu的速度遠(yuǎn)遠(yuǎn)大于FLASH的操作速度。用庫函數(shù)FLASH_SetLatency(FLASH_Latency_2)來設(shè)置。

3、開啟FLASH預(yù)讀緩沖功能,加速FLASH的讀取。所有程序中必須的
用法:FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

4、打開內(nèi)部振蕩器RCC_HSICmd(ENABLE);

5、STM32對Flash的操作必須遵循一定的步驟,必須先擦除再寫入,擦除必須以PAGE(頁)位單位,寫(編程)必須以Word(兩字節(jié))為單位。

6、關(guān)于讀保護(hù)和寫保護(hù):

配置了讀保護(hù)之后,F(xiàn)lash中的代碼和數(shù)據(jù)無法通過JTAG和RAM中的程序讀出,起到了加密的作用。寫保護(hù)是以頁(或多頁)為單位的,配置之后無法被擦除或修改,加強(qiáng)了代碼的可靠性。讀保護(hù)和寫保護(hù)都是在自己的程序中配置的。你可以在第一次運行程序是配置相關(guān)選擇字。

程序是從0x0800f800開始寫入2個半字的數(shù)據(jù),然后在MAIN函數(shù)中用串口返回:

voidflash_write()

{u16cnt=0;

u16data[2]={0x1234,0x5678};

FLASH_Unlock();

FLASH_ClearFlag(FLASH_FLAG_EOP|FLASH_FLAG_PGERR|FLASH_FLAG_WRPRTERR);

FLASH_ErasePage(0x0800f800);

for(cnt=0;cnt<2;cnt++)

FLASH_ProgramHalfWord((0x0800f800+cnt*2),data[cnt]);

FLASH_Lock();

}

MAIN函數(shù)關(guān)于Flash操作的代碼:

uint8_ti;

FLASH_SetLatency(FLASH_Latency_2);

FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

flash_write();

i=*(uint32_t*)(0x0800f802);//讀取改地址的數(shù)據(jù),賦值i

send_byte(i);//串口返回0x0800f802地址處的數(shù)據(jù)

因為之前想寫一個字節(jié)老是出錯,所以翻翻手冊,果然看到不能寫1個字節(jié)數(shù)據(jù)。而且還發(fā)現(xiàn),flash寫地址為奇數(shù)時也會出錯。所以這份代碼里面

寫flash的地址只能是偶數(shù)。瀏覽過程中還發(fā)現(xiàn),手冊里面說寫flash和擦除flash的時候會影響cpu的運行速度,沒仔細(xì)看(真心不想看)。


1.-DataFlash.c----------------------------------

2.

3.#include"DataFlash.h"


4uint16_tFlash_Write_Without_check(uint32_tiAddress,uint8_t*buf,uint16_tiNumByteToWrite){

9.uint16_ti;

10.volatileFLASH_StatusFLASHStatus=FLASH_COMPLETE;

11.i=0;

12.

13.//FLASH_UnlockBank1();

14.while((i

15.{

16.FLASHStatus=FLASH_ProgramHalfWord(iAddress,*(uint16_t*)buf);

17.i=i+2;

18.iAddress=iAddress+2;

19.buf=buf+2;

20.}

21.

22.returniNumByteToWrite;

23.}

24.//

33.intFlash_Write(uint32_tiAddress,uint8_t*buf,uint32_tiNbrToWrite){

34./

35.uint32_tsecpos;

36.uint32_tiNumByteToWrite=iNbrToWrite;

37.uint16_tsecoff;

38.uint16_tsecremain;

39.uint16_ti=0;

40.uint8_ttmp[FLASH_PAGE_SIZE];

41.

42.FLASH_UnlockBank1();

43.secpos=iAddress&(~(FLASH_PAGE_SIZE-1));//扇區(qū)地址

44.secoff=iAddress&(FLASH_PAGE_SIZE-1);//在扇區(qū)內(nèi)的偏移

45.secremain=FLASH_PAGE_SIZE-secoff;//扇區(qū)剩余空間大小

46.volatileFLASH_StatusFLASHStatus=FLASH_COMPLETE;

47.

48.if(iNumByteToWrite<=secremain)secremain=iNumByteToWrite;//不大于4096個字節(jié)

49.

50.while(1){

51.Flash_Read(secpos,tmp,FLASH_PAGE_SIZE);//讀出整個扇區(qū)

52.for(i=0;i//校驗數(shù)據(jù)

53.if(tmp[secoff+i]!=0XFF)break;//需要擦除

54.}

55.if(i//需要擦除

56.FLASHStatus=FLASH_ErasePage(secpos);//擦除這個扇區(qū)

57.if(FLASHStatus!=FLASH_COMPLETE)

58.return-1;

59.for(i=0;i//復(fù)制

60.tmp[i+secoff]=buf[i];

61.}

62.Flash_Write_Without_check(secpos,tmp,FLASH_PAGE_SIZE);//寫入整個扇區(qū)

63.}else{

64.Flash_Write_Without_check(iAddress,buf,secremain);//寫已經(jīng)擦除了的,直接寫入扇區(qū)剩余區(qū)間.

65.}

66.

67.if(iNumByteToWrite==secremain)//寫入結(jié)束了

68.break;

69.else{

70.secpos+=FLASH_PAGE_SIZE;

71.secoff=0;//偏移位置為0

72.buf+=secremain;//指針偏移

73.iAddress+=secremain;//寫地址偏移

74.iNumByteToWrite-=secremain;//字節(jié)數(shù)遞減

75.if(iNumByteToWrite>FLASH_PAGE_SIZE)secremain=FLASH_PAGE_SIZE;//下一個扇區(qū)還是寫不完

76.elsesecremain=iNumByteToWrite;//下一個扇區(qū)可以寫完了

77.}

78.

79.}

80.

81.FLASH_LockBank1();

82. return iNbrToWri

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

中國北京(2025年9月10日)—— 業(yè)界領(lǐng)先的半導(dǎo)體器件供應(yīng)商兆易創(chuàng)新GigaDevice(股票代碼 603986)亮相于深圳國際會展中心舉辦的第26屆中國國際光電博覽會(展位號:12C12),全面展示GD25 SPI...

關(guān)鍵字: 光通信 MCU Flash

在嵌入式系統(tǒng)中,F(xiàn)lash存儲器因其非易失性、高密度和低成本特性,成為代碼存儲和關(guān)鍵數(shù)據(jù)保存的核心組件。然而,MCU驅(qū)動Flash讀寫時,開發(fā)者常因?qū)τ布匦岳斫獠蛔慊虿僮髁鞒淌韬?,陷入性能下降、?shù)據(jù)損壞甚至硬件損壞的陷...

關(guān)鍵字: MCU驅(qū)動 Flash

在嵌入式開發(fā)中,STM32的時鐘系統(tǒng)因其靈活性和復(fù)雜性成為開發(fā)者關(guān)注的焦點。然而,看似簡單的時鐘配置背后,隱藏著諸多易被忽視的陷阱,輕則導(dǎo)致系統(tǒng)不穩(wěn)定,重則引發(fā)硬件損壞。本文從時鐘源選擇、PLL配置、總線時鐘分配等關(guān)鍵環(huán)...

關(guān)鍵字: STM32 時鐘系統(tǒng)

在嵌入式系統(tǒng)開發(fā)中,STM32系列微控制器的內(nèi)部溫度傳感器因其低成本、高集成度特性,廣泛應(yīng)用于設(shè)備自檢、環(huán)境監(jiān)測等場景。然而,受芯片工藝差異和電源噪聲影響,其原始數(shù)據(jù)存在±1.5℃的固有誤差。本文從硬件配置、校準(zhǔn)算法、軟...

關(guān)鍵字: STM32 溫度傳感器

在能源效率與智能化需求雙重驅(qū)動下,AC-DC轉(zhuǎn)換器的數(shù)字控制技術(shù)正經(jīng)歷從傳統(tǒng)模擬方案向全數(shù)字架構(gòu)的深刻變革?;赟TM32微控制器的PFM(脈沖頻率調(diào)制)+PWM(脈沖寬度調(diào)制)混合調(diào)制策略,結(jié)合動態(tài)電壓調(diào)整(Dynam...

關(guān)鍵字: AC-DC STM32

當(dāng)前智能家居產(chǎn)品需求不斷增長 ,在這一背景下 ,對現(xiàn)有澆花裝置缺陷進(jìn)行了改進(jìn) ,設(shè)計出基于STM32單片機(jī)的全 自動家用澆花機(jī)器人。該設(shè)計主要由機(jī)械結(jié)構(gòu)和控制系統(tǒng)構(gòu)成 ,機(jī)械結(jié)構(gòu)通過麥克納姆輪底盤與噴灑裝置的結(jié)合實現(xiàn)機(jī)器...

關(guān)鍵字: STM32 麥克納姆輪 安全可靠 通過性強(qiáng)

用c++編程似乎是讓你的Arduino項目起步的障礙嗎?您想要一種更直觀的微控制器編程方式嗎?那你需要了解一下Visuino!這個圖形化編程平臺將復(fù)雜電子項目的創(chuàng)建變成了拖動和連接塊的簡單任務(wù)。在本文中,我們將帶您完成使...

關(guān)鍵字: Visuino Arduino ESP32 STM32
關(guān)閉