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

歷史上的今天

今天是:2025年05月01日(星期四)

2018年05月01日 | STM32學習之:內部Flash

發布者:MysticalGarden 來源: eefocus關鍵字:STM32  內部Flash 手機看文章 掃描二維碼
隨時隨地手機看文章

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


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


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

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


#if FLASH_SIZE<256

  #define SECTOR_SIZE           1024    //字節

#else 

  #define SECTOR_SIZE           2048    //字節

#endif


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


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


//從指定地址開始讀取多個數據

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位數據)

uint16_t FLASH_ReadHalfWord(uint32_t address)

{

  return *(__IO uint16_t*)address; 

}


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

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;

}

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


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

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

如下為Flash全擦除過程

根據以上圖示我們便寫數據寫入函數如下:

//從指定地址開始寫入多個數據

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;            //計算扇區地址,對于STM32F103VET6為0~255

  

  uint32_t sectorStartAddress=sectorPosition*SECTOR_SIZE+FLASH_BASE;    //對應扇區的首地址


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

  

  uint16_t dataIndex;

  for(dataIndex=0;dataIndex

  {

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

  }

  

  FLASH_Lock();//上鎖寫保護

}

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

關鍵字:STM32  內部Flash 引用地址:STM32學習之:內部Flash

上一篇:STM32F103系列 PB4引腳問題
下一篇:STM32 Flash讀寫;Flash地址對應的存儲內容及方式

推薦閱讀

一、GPIO1.1 內部上拉電路51單片機的I/O口都可以同時作為輸入和輸出之用。除了P0口以外,其他的I/O口都有內部上拉電阻。3個內部上拉電阻都有不同的功用,要理解這個電路需要一定的模擬電路的知識。內部上拉電阻示意圖 由于相關的硬件配置,在編程時有以下需要注意的地方:當I/O口被用作輸入用途時,讀取輸入前要保證鎖存器狀態為1。當將I/O口由低拉高時,...
節能、減排、補貼、性價比高等是新能源汽車的賣點,正因為這些燃油車無法企及的優勢,消費者對于新能源車的接受度逐年大幅提升。但是,新能源汽車并非十全十美,其中最突出的就是安全問題,接連爆出的燃燒事故給這個行業蒙上了一層陰影,也讓消費者產生了擔憂。據不完全統計,目前已發生的新能源汽車自燃或爆炸問題已有近50起,一旦起火,火勢蔓延極快,逃...
4月30日晚間,據長電科技發布公告表示,芯動技術公司稱,由于長電科技封裝質量不合格,導致芯動技術有限公司損失25,000,000美元(折合人民幣1.74億),因此向長電科技索賠。長電科技在公告中強調:“公司及控股子公司星科金朋將依法維護自身合法權益。”據公告內容顯示,芯動技術公司訴稱:芯動公司與公司在2018年3月簽訂《委托芯片封裝設計及加工合同》,...
近年來,數字經濟規模不斷擴張,已成為國民經濟的重要組成部分,美、英、德等國的數字經濟GDP占比超過60%,居主導地位。目前,我國正積極推進數字產業化、產業數字化,引導數字經濟和實體經濟深度融合,推動經濟高質量發展。其中,隨著數字經濟向能源領域加速滲透,能源行業加快數字化、網絡化、智能化轉型。作為一種應運而生的新經濟形態,能源數字經濟...

史海拾趣

問答坊 | AI 解惑

過孔對信號傳輸的影響

一.過孔的基本概念 過孔(via)是多層PCB的重要組成部分之一,鉆孔的費用通常占PCB制板費用的30%到40%。簡單的說來,PCB上的每一個孔都可以稱之為過孔。從作用上看,過孔可以分成兩類:一是用作各層間的電氣連接;二是用作器件的... …

查看全部問答∨

無線模塊CC1100收發細節請教

請教大家: 我最近在調試cc1100,通了,但是必須在發送端延時30ms左右才能無誤的接受(通過串口顯示在PC上)。如果小于30ms的延時或則不延時就不能完整的接收數據。我測了一下,一次發送4字節需要40ms的時間。問題是收發之間的準備過程是怎樣的啊, ...…

查看全部問答∨

關于24CXXX系列EEPROM的讀寫操作問題?

這個東西連續讀寫的話一定要按頁讀寫? 例如有一個uchar[8] 我從地址0x0d出開始寫,那么uchar[3-7]會寫到哪去? A:0x10-0x14 B:0x00-0x04 C:0x08-0x0b? 有精通這個的告訴我下啊,我這兩天得到的慘痛教訓是不一定選A…

查看全部問答∨

酒店里面是否裝電腦

一.我們的項目是什么         通俗地講:此項目,就是給酒店裝一間網吧,而電腦不是集中放到一個大廳里,而是分散地放到酒店客房里面,為客人提供上網服務,并且收取相應的上網費用。 二.市場分析      &n ...…

查看全部問答∨

ZwOpenFile與ZwCreateFile有什么關系?

ZwOpenFile與ZwCreateFile有什么關系? 我寫一個驅動監控了所有的ZwCreateFile,一般的文件建立都可以攔截到,但一個應用的安裝程序在安裝文件時,卻監控不到?不知道是何道理?難道它沒有用zwcreatefile而用了zwopenfile?那么兩個函數之間有何關 ...…

查看全部問答∨

看門狗問題?

比如我現在看門狗定時為1s的話即:WDTCTL=WDTPW+WDTCNTCL+WDTSSEL;那如果在后面程序中要打狗的話是不是也只能是WDTCTL=WDTPW+WDTCNTCL+WDTSSEL;語句?如果是這樣就太麻煩了.因為如果我在關閉了看門狗的地方也有這樣一條清除指令(WDTCTL=WDTPW+WDTCNTC ...…

查看全部問答∨

畢業了,免費贈送單片機畢業設計

各位: 本人有大量單片機設計的畢業設計,可以提供給大家參考,內含大量全套單片機畢業設計,回帖即可下載!!!!         部分設計你需要回帖才能下載!!! 如果在下載過程中遇到任何問題,請聯系我們QQ:273546746 ...…

查看全部問答∨

MSP430 LaunchPad開發板可以適用與mp430f2013嗎?

如題,我看都是講的對應mp430g系列的,不知道f系列可以適用嗎?…

查看全部問答∨

運放的正負輸入端加箝位二極管問題

如果我在運放的正負輸入端加上一對箝位二極管,會減少電路的輸入電阻嗎,請大家指教!…

查看全部問答∨

我想制作一個用筆記本無線遙控的智能車

各位大俠好!!!我想制作一個用筆記本無線遙控的智能車,配件有ATmega128最小系統板,減速電機,驅動器,還有XL03-232AP2-1無線收發模塊(兩個),XLUSB-TTL轉接器一個,現在小車基本上已經做好了,無線收發模塊也配置好了,但沒有接到小車上去, ...…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 古田县| 沂水县| 衢州市| 招远市| 顺昌县| 高州市| 宜川县| 泗水县| 浠水县| 叶城县| 嵊州市| 潢川县| 盐源县| 武山县| 芮城县| 平遥县| 积石山| 石林| 临泽县| 乌恰县| 民乐县| 华蓥市| 灵川县| 三明市| 固阳县| 青海省| 天柱县| 治县。| 磐安县| 和硕县| 分宜县| 呼和浩特市| 永川市| 手游| 广河县| 吴川市| 延庆县| 临沭县| 鄯善县| 蕉岭县| 尚志市|