娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2025年05月06日(星期二)

正在發(fā)生

2018年05月06日 | STM32F103使用內(nèi)部Flash保存參數(shù)

發(fā)布者:柳絮輕風(fēng) 來源: eefocus關(guān)鍵字:STM32F103  內(nèi)部Flash  保存參數(shù) 手機看文章 掃描二維碼
隨時隨地手機看文章

      在我們應(yīng)用開發(fā)時,經(jīng)常會有一些程序運行參數(shù)需要保存,如一些修正系數(shù)。這些數(shù)據(jù)的特點是:數(shù)量少而且不需要經(jīng)常修改,但又不能定義為常量,因為每臺設(shè)備可能不一樣而且在以后還有修改的可能。將這類數(shù)據(jù)存在指定的位置,需要修改時直接修改存儲位置的數(shù)值,需要使用時則直接讀取,會是一種方便的做法。考慮到這些數(shù)據(jù)量比較少,使用專門的存儲單元既不經(jīng)濟,也沒有必要,而STM32F103內(nèi)部的Flash容量較大,而且ST的庫函數(shù)中還提供了基本的Flash操作函數(shù),實現(xiàn)起來也比較方便。

      以大容量產(chǎn)品STM32F103VE為例,其Flash容量達到512K,可以將其中一部分用作數(shù)據(jù)存儲。如下是大容量的Flash組織模式:

      根據(jù)上面的Flash組織模式,我們可以根據(jù)自己的使用方便來作相應(yīng)的定義。因為大容量每個扇區(qū)定義為2K,而小容量和中容量都定義為1K,所以我們做如下宏定義:

#define FLASH_SIZE 512          //所選MCU的FLASH容量大小(單位為K)


#if FLASH_SIZE<256

  #define SECTOR_SIZE           1024    //字節(jié)

#else 

  #define SECTOR_SIZE           2048    //字節(jié)

#endif

      雖然ST的庫函數(shù)比較全面,但都是基本操作,為了使用方面,根據(jù)我們自己的需要對其進行再次封裝

      對于讀操作相對比較簡單,內(nèi)置閃存模塊可以在通用地址空間直接尋址,就像讀取變量一樣。

//從指定地址開始讀取多個數(shù)據(jù)

void FLASH_ReadMoreData(uint32_t startAddress,uint16_t *readData,uint16_t countToRead)

{

  uint16_t dataIndex;

  for(dataIndex=0;dataIndex

  {

    readData[dataIndex]=FLASH_ReadHalfWord(startAddress+dataIndex*2);

  }

}


//讀取指定地址的半字(16位數(shù)據(jù))

uint16_t FLASH_ReadHalfWord(uint32_t address)

{

  return *(__IO uint16_t*)address; 

}


//讀取指定地址的全字(32位數(shù)據(jù))

uint32_t FLASH_ReadWord(uint32_t address)

{

  uint32_t temp1,temp2;

  temp1=*(__IO uint16_t*)address; 

  temp2=*(__IO uint16_t*)(address+2); 

  return (temp2<<16)+temp1;

}

      對于寫操作相對來說要復(fù)雜得多,寫操作包括對用戶數(shù)據(jù)的寫入和擦除。為了防止誤操作還有寫保護鎖。但這些基本的操作ST的庫函數(shù)已經(jīng)為我們寫好了,我們只需要調(diào)用即可。

      STM32復(fù)位后,F(xiàn)PEC模塊是被保護的,只有在寫保護被解除后,我們才能操作相關(guān)寄存器。STM32閃存的編程每次必須寫入16位,任何不是半字的操作都會造成錯誤。如下圖是Flash寫的過程:

      STM32的FLASH在編程的時候,也必須要求其寫入地址的FLASH 是被擦除了的(也就是其值必須是0XFFFF),否則無法寫入。Flash的擦除要求必須整頁擦除,所以也必須整頁寫入,否則可能會丟失數(shù)據(jù)。如下圖是Flash頁擦除過程:

       如下為Flash全擦除過程,

      根據(jù)以上圖示我們便寫數(shù)據(jù)寫入函數(shù)如下:

//從指定地址開始寫入多個數(shù)據(jù)

void FLASH_WriteMoreData(uint32_t startAddress,uint16_t *writeData,uint16_t countToWrite)

{

  if(startAddress=(FLASH_BASE+1024*FLASH_SIZE)))

  {

    return;//非法地址

  }

  FLASH_Unlock();         //解鎖寫保護

  uint32_t offsetAddress=startAddress-FLASH_BASE;               //計算去掉0X08000000后的實際偏移地址

  uint32_t sectorPosition=offsetAddress/SECTOR_SIZE;            //計算扇區(qū)地址,對于STM32F103VET6為0~255

  

  uint32_t sectorStartAddress=sectorPosition*SECTOR_SIZE+FLASH_BASE;    //對應(yīng)扇區(qū)的首地址


  FLASH_ErasePage(sectorStartAddress);//擦除這個扇區(qū)

  

  uint16_t dataIndex;

  for(dataIndex=0;dataIndex

  {

    FLASH_ProgramHalfWord(startAddress+dataIndex*2,writeData[dataIndex]);

  }

  

  FLASH_Lock();//上鎖寫保護

}

      在擦除之前應(yīng)該將頁面上的數(shù)據(jù)讀取出來與要寫入的數(shù)據(jù)合并,待擦除后再寫入,但這樣數(shù)據(jù)量很大(大容量是2K一個扇區(qū)),所以考慮到是少量數(shù)據(jù)存儲,所以每次都將全部數(shù)據(jù)同時寫入,簡化操作,也減少數(shù)據(jù)處理量。經(jīng)測試以上程序?qū)懭牒妥x出數(shù)據(jù)均正確,可以實現(xiàn)內(nèi)部Flash的讀寫操作。需要更深入了解可以參考《STM32F10xxx 閃存編程參考手冊》。

關(guān)鍵字:STM32F103  內(nèi)部Flash  保存參數(shù) 引用地址:STM32F103使用內(nèi)部Flash保存參數(shù)

上一篇:STM32中的程序在RAM還是FLASH里運行?
下一篇:stm32存儲結(jié)構(gòu)& 存儲器映射

推薦閱讀

中國汽車工業(yè)協(xié)會常務(wù)副會長董揚在公開場合提出,將啟動汽車動力蓄電池和氫燃料電池行業(yè)白名單申報工作,《汽車動力蓄電池和氫燃料電池行業(yè)白名單暫行管理辦法》也于同日發(fā)布。時隔一年多的動力電池白名單再度回歸,在業(yè)內(nèi)一時疑問、詢問、質(zhì)疑聲四起。近幾年來動力電池業(yè)的發(fā)展景象,被一些行業(yè)大咖們形象地總結(jié)為“波瀾起伏”,但“濤聲依舊”。下面就來...
在聽歌這件事上,人們總能找到諸多新穎的方式,除了傳統(tǒng)的耳機與音箱外,穿戴式的揚聲器或者帶有裝飾性作用的藍牙喇叭等等都是音頻行業(yè)里全新的玩法,這些東西有些屬于聽音方式上的創(chuàng)新,有些則屬于跨界產(chǎn)品的融合。無論前景如何,這些產(chǎn)品確實突破了一些傳統(tǒng)的枷鎖,在體驗上帶來了全新的感受,這種敢于嘗試的精神是值得褒獎的。就好比索尼推出的音管系列...
2020年4月,華為投資的芯片公司思瑞浦的科創(chuàng)板上市申請獲得受理,這是華為2019年4月設(shè)立子公司哈勃科技作為國內(nèi)投資平臺之后,投出的首個進入IPO階段的項目。 巧合的是,此時距離哈勃科技正好過去一周年。僅用一年時間即收獲IPO項目,以VC的標(biāo)準(zhǔn)而論哈勃科技的表現(xiàn)堪稱完美。更值得推崇的是,華為在投資之外,還對思瑞浦的產(chǎn)品、技術(shù)和業(yè)務(wù)起到了巨大的幫...
5月5日,據(jù)共同社報道稱,對于搭載于所有電子設(shè)備的半導(dǎo)體,日本政府本月內(nèi)將匯總旨在強化開發(fā)及生產(chǎn)體制的國家戰(zhàn)略。原因除了著眼于第五代(5G)移動通信系統(tǒng)等的擴大而謀求穩(wěn)定供應(yīng)外,還有美國和中國的技術(shù)霸權(quán)之爭令半導(dǎo)體在安保方面重要性上升。圍繞尖端產(chǎn)品,日本將與美歐部分國家及全球市場占有率較高的臺灣合作。力爭吸引海外廠商等在國內(nèi)設(shè)立大規(guī)...

史海拾趣

問答坊 | AI 解惑

基于ATmega8的基本實驗

這是我初學(xué)avr是做的幾個基本的實驗程序,主要有:             流水燈,            數(shù)碼管顯示16進制數(shù),           & ...…

查看全部問答∨

飛思卡爾s08單片機外圍模塊參考手冊

個人覺得這是飛思卡爾提供的針對S08單片機最實用的資料。涵蓋了S08單片機所有外圍模塊,比如UART,SPI,定時器等,針對每個模塊都給出了具體的編程實例,很有參考價值。傳上來,相信對大家有用。…

查看全部問答∨

在C語言中如何在中斷服務(wù)程序中實現(xiàn)將數(shù)據(jù)保存到文件保存和屏幕顯示。

  在中斷服務(wù)程序中(C語言編的,TC下編譯的)不能調(diào)用像printf,fprintf,putc這樣的函數(shù),會得到一些意想不到的結(jié)果。那么如果想在中斷服務(wù)程序中實現(xiàn)將數(shù)據(jù)保存到文件和在屏幕顯示出來該怎么辦呢?   向各位請教啊。…

查看全部問答∨

優(yōu)龍2410更改LCD后wince啟動BIOS圖片出現(xiàn)異常

LCD更換后,由原來的320*240更改為800*600,BIOS啟動的圖片開始可以正常顯示,當(dāng)運行完BIOS里NandLoadRunW函數(shù)中的LoadRun函數(shù)后就在屏幕的下方有幾行花屏現(xiàn)象,BIOS bin文件有原來的幾十K現(xiàn)在增加到300K,內(nèi)存分配已經(jīng)修改成 static struct Partit ...…

查看全部問答∨

讀取key值失敗問題

我用stm32fs103cb芯片編了段,要與主機串口通信getkey,進行判斷后進行處理數(shù)據(jù)。但在buf區(qū)始終無法得到我要的鍵值。請大蝦幫忙!!具體代碼如下: int main (void) {   int uart3_ok = 0;   int j3;   int i,j; ...…

查看全部問答∨

用DriverStudio生成的usb驅(qū)動無法安裝

最近有個任務(wù),是需要為一個usb板子寫驅(qū)動程序,業(yè)務(wù)邏輯非常簡單,就是外設(shè)和主機的雙向數(shù)據(jù)通信,數(shù)據(jù)沒有任何格式,也不屬于已知的任何一種usb外設(shè)類型。 外設(shè)板子的程序很簡單,就是初始化usb,然后在device descripotr里面指定 vendorid,pro ...…

查看全部問答∨

嵌入式CPU選型問題

老板讓我為“嵌入式矢量圖形終端”選擇開發(fā)板,使用Linux系統(tǒng)。要求外接顯示器,分辨率至少1024x768,越大越好。系統(tǒng)整體速度越快越好,但要控制成本比同檔次PC機低。 我網(wǎng)上查了一下,找到兩種系統(tǒng)滿足要求:     ARM系統(tǒng):  &nb ...…

查看全部問答∨

求組!~~~

/*------------------------------------------------------------    HELLOWIN.C -- Displays "Hello, Windows 98!" in client area                  (c) Charles ...…

查看全部問答∨

nand_if.c文件是不是提供了nandflash的寫平衡呀?

                                 看了一下,沒看明白它的實現(xiàn)機制是什么樣的?有沒有介紹這個實現(xiàn)方法的文章?…

查看全部問答∨
小廣播
設(shè)計資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機文章
隨便看看

 
EEWorld訂閱號

 
EEWorld服務(wù)號

 
汽車開發(fā)圈

 
機器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務(wù)審批[2006]字第258號函 京公網(wǎng)安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 邮箱| 潍坊市| 虞城县| 宜良县| 肥东县| 金沙县| 万全县| 抚顺市| 邵东县| 汉源县| 临沧市| 同仁县| 齐齐哈尔市| 沧州市| 武汉市| 上饶县| 桃江县| 新田县| 温州市| 都昌县| 济南市| 福安市| 永嘉县| 长白| 台湾省| 乌恰县| 城固县| 罗甸县| 富宁县| 广丰县| 大埔区| 德保县| 宜春市| 顺平县| 会宁县| 拜城县| 仁寿县| 济阳县| 楚雄市| 牙克石市| 扶风县|