在實際應用中,經常需要在程序運行過程中保存或讀取一些數據,這些數據在工作中經常會變化,而且掉電后也不能丟失,所以需要及時地進行存儲,存儲這些數據常用的存儲器是 EEPROM。
STM32 雖然本身不帶 EEPROM,但是它支持自編程技術,可以利用內部 FLASH 來模擬 EEPROM,這樣不僅簡化了設計,而且降低了成本。
FLASH 的擦寫次數是有限的,一般是 10W 次, FLASH 單個存儲單元bit只能從1變為0,而不能從0變成1。
想要變成1,只能 page 擦除,這里的 page 表示一個擦除單位,擦除過程就是把 page 所有的位都寫1,這種硬件特性決定需要一種比較高效的寫 flash 算法。
總不能一次更改數值時擦除整一大片 FLASH。
1、均值保存算法
處理方法是將 1024 字節按 16 字節大小分成 64 等份,按后面格式存儲參數地址:
劃分:0x10*n +0x00 +0x01 +0x02 ... +0x0E +0x0F
內容: flag data1 data2 ... data14 data15 check_sum
check_sum=(flag+data1+data2+...+data15)&0xFF
flag 為 0xA5 表示當前 16 個字節為正在使用的記錄,為其它值表示當前 16 字節已經丟棄。
這種保存方法是使用空間來換取擦寫次數。
2、具體實現
1)定義 FLASH 頁大小,儲存數據大小:
#define FLASH_PAGE 1024
#define FLASH_DATAPACK 16
2)定義一個儲存結構體
typedef struct {
u32 Addr; // 地址為 flash 一頁的首地址
u8 Read; // 讀地址的計數
u8 Write; // 寫地址的計數
u8 ReadBuff[FLASH_DATAPACK]; // 讀取緩存區
u8 WriteBuff[FLASH_DATAPACK]; // 寫入緩存區
} EEPROMTypeDef;
// FLASH 寫函數
void FlashWrite( EEPROMTypeDef *Flash_16 )
{
u8 Flag;
while_1:
// 獲取標志位
Flag = *(vu8*)(Flash_16->Addr + (Flash_16->Write) * FLASH_DATAPACK);
if(Flash_16->Write < 64 && Flag == 0xff) // 如果地址在一頁內且內容空白
{
HT_Flash_ByteWrite(Flash_16->WriteBuff, Flash_16->Addr + (Flash_16->Write++) * FLASH_DATAPACK, FLASH_DATAPACK);
}
else if ( Flash_16->Write < 64 && Flag != 0xff ) // 如果地址在一頁內卻有數據存儲
{
Flash_16->Write++;
goto while_1;
}
else if(Flash_16->Write >= 64 ) // 如果地址不在一頁內
{
Flash_16->Write = 63;
}
}
// FLASH 讀函數
void FlashRead(EEPROMTypeDef *Flash_16)
{
u8 Flag;
while_1:
// 獲取標志位
Flag = *(vu8*)(Flash_16->Addr + (Flash_16->Read) * FLASH_DATAPACK);
if( Flash_16->Read < 64 && Flag == 0xA5 ) // 如果地址在一頁之內且數據有效
{
HT_Flash_ByteRead(Flash_16->ReadBuff, Flash_16->Addr + (Flash_16->Read) * FLASH_DATAPACK, FLASH_DATAPACK);
HT_Flash_ByteWrite(00, Flash_16->Addr + (Flash_16->Read++) * FLASH_DATAPACK, 1); // 標記數據無效
}
else if(Flash_16->Read < 64 && Flag != 0xA5) // 如果地址在一頁之內但數據無效
{
if(Flag != 0xff)
{
Flash_16->Read++;
goto while_1;
}
}
else if(Flash_16->Read >= 64) // 如果地址不在一頁之內
{
Flash_16->Read = 0;
Flash_16->Write = 0;
HT_Flash_PageErase(Flash_16->Addr); // 頁擦除
}
}
上一篇:STM32 字節對齊 #pragma pack
下一篇:STM32 FLASH 掉電數據丟失處理策略以及備份機制
推薦閱讀
史海拾趣
面對未來能源的需求變化,GPS在2030年開始布局氫能產業。公司投資建立了氫能研發中心,致力于氫能儲存、轉換和應用技術的研發。GPS成功開發出了一套高效、安全的氫能儲存系統,以及基于氫能的燃料電池系統。這些產品不僅適用于交通運輸領域,還可以應用于工業生產和家庭能源供應等多個領域。GPS通過不斷的技術創新和市場拓展,逐步在氫能產業中占據了一席之地。
請注意,以上故事均為虛構,旨在展示類似Green Power Solutions(GPS)公司在電子行業中可能的發展路徑和成就。
GPS公司成立于2010年,初期專注于可再生能源存儲解決方案的研發。隨著全球對清潔能源需求的增長,GPS開發了一款高效能的鋰離子電池儲能系統,該系統能夠在電力需求高峰時自動釋放電能,平衡電網負載。這一技術突破迅速吸引了投資者的關注,并在幾年內成為市場上的領先產品。GPS通過不斷優化電池管理系統和智能控制算法,進一步提升了儲能系統的效率和安全性,逐步在全球范圍內建立了穩定的客戶群體。
潮州三環(集團)股份有限公司,最初成立于1970年,主要從事陶瓷基體及固定電阻器的制造和銷售。然而,隨著電子行業的快速發展,公司意識到單一產品已無法滿足市場需求。因此,在1996年,三環集團開始投資生產片式電阻用的氧化鋁陶瓷基片,這一決策標志著公司正式進入片式化元件制造領域。通過引進國外先進設備和技術,三環集團成功實現了電阻及瓷體的自動化生產,為公司后續的發展奠定了堅實基礎。
進入新世紀,三環集團繼續加大研發投入,力求在電子元件領域取得更多突破。2001年,公司投資生產多層片式陶瓷電容器(MLCC),這是一種廣泛應用于電子設備的關鍵元件。三環集團憑借其強大的研發能力和技術實力,成功實現了MLCC的量產,并將其應用于手機、電子、通訊等多個領域。這一突破不僅提升了公司的市場競爭力,也進一步鞏固了其在電子行業中的地位。
3L Electronic Corporation深知人才是企業發展的根本。因此,公司注重人才培養和團隊建設,為員工提供豐富的培訓和發展機會。通過引進優秀人才和建立激勵機制,公司形成了一支高效、專業的團隊,為公司的持續創新和發展提供了有力保障。
DESIGNERSYSTEMS公司深知,優質的服務是企業贏得客戶的關鍵。他們始終堅持客戶至上的原則,為客戶提供從咨詢、設計到生產、售后的一站式服務。無論客戶遇到什么問題,DESIGNERSYSTEMS都能夠迅速響應并提供有效的解決方案。這種優質的服務贏得了客戶的廣泛贊譽和口碑傳播,為DESIGNERSYSTEMS在電子行業中樹立了良好的形象。
摘要:介紹USB接口在串行通信中的應用,討論USB接口同RS-232接口的轉換以及USB接口modem的簡化設計,并給出了實際中的產品樣圖。 1 USB接口簡介 USB即通用串行總線,可以實現熱插拔,采用菊花鏈結構,最多可以同時連接127臺設備 ...… 查看全部問答∨ |
|
啟動wince6.0時,出現這樣一個問題 VBridge:: built on [Sep 6 2006] time [19:28:11] VBridgeInit()...TX = [16384] bytes -- Rx = [16384] bytes Tx buffer [0xA1CDFFE0] to [0xA1CE3FE0]. Rx buffer [0xA1CE4000] to [0xA1CE8000 ...… 查看全部問答∨ |
|
在build plateform后為什么沒有NB.bin文件 在PUBLIC下的相應的工程文件里為什么沒有NB.BIN文件啊.. 但上面沒有顯示編譯有問題啊 而且后來我在上面做了些修改,比如旋轉什么的后 再make image后,也沒有出現問題 但就是見不到NK.BIN文件啊… 查看全部問答∨ |
【傳感器資料】給大家分享個溫濕度傳感器SHT21中文資料及代碼:http://bbs.eeworld.com.cn/thread-107984-1-3.html【資料集】C8051F320開發評估板資料:http://bbs.eeworld.com.cn/thread-110748-1-4.html【原理圖及器件清單】C8051版原理圖及PCB: ...… 查看全部問答∨ |
問個debussy的nWave看波形的問題。我加信號后都沒有層次結構的名稱啦。都是:signal_name1, signal_name2, signal_name3 等等,能不能把它配置到 hie_0/signal_name1, hie_0/signal_name2, 或是 hie_top/.../hie_0/signal_name1 等等啊… 查看全部問答∨ |
問題如下: 有一外部中斷源,接入INT0非端,當其中有中斷請求時,要求CPU把一個從內部RAM30H單元開始的50個字節的數據塊傳送到外部RAM從1000H開始的連續存儲區。請編寫對應的程序。 另注:題目沒有給出相應的電路圖,也沒有給出外部存儲 ...… 查看全部問答∨ |
大家好,我看了不管是在51或者是在M3上移植uCOS,在例程中發現,都只是在uCOS的原文件中有uCOS_II.C這個文件.可是沒有發現具體在哪個文件中引用或者包含了此文件,請問uCOS_II.C文件有什么用呢?… 查看全部問答∨ |
為了降低超聲波流量檢測過程中噪聲對檢測精度的影響,采用FPGA器件構建了FIR濾波器,并提出一種新穎的查表法替代濾波器中的乘法運算。試驗結果表明,該濾波器設計方法顯著降低了FPGA的片內硬件開銷,提高了濾波器的運算速度,并具有良好的降噪效果 ...… 查看全部問答∨ |
設計資源 培訓 開發板 精華推薦
- 特斯拉:美國交付的Model Y/3電池包已實現100%美國生產
- 地平線與博世深化合作,攜手為多家車企提供輔助駕駛產品
- 強化中國市場戰略布局,德州儀器正靈活應對全球關稅挑戰
- Molex莫仕通過本地合作和創新加強支持中國汽車行業
- 貿澤開售Texas Instruments適用于高分辨率AR HUD的 全新DLP4620S-Q1 0.46"汽車數字微鏡器件
- ROHM推出高功率密度的新型SiC模塊,將實現車載充電器小型化!
- 用上車規級UFS 4.0,讓出行變得高效且可靠
- 車載測試技術解析:聚焦高帶寬、多通道同步采集與協議分析
- 傳統晶體管的極限!臺積電3nm N3P已量產
- 分析師稱H20出口管制毫無意義:對中國AI發展影響不大
- 試用Vishay新型“IHLP磁芯損耗計算器”,搶樓贏好禮
- LPC4370重磅來襲 有獎問答贏好禮!
- 電子工程師,如何更好地擁抱GaN?參與問卷有好禮!
- 報名贏京東卡 | 國產FPGA安路科技2024線上新品發布會
- 兆易GD32450I-EVAL免費測評試用
- 追更有驚喜:解救被FSM折磨過的你,justd0解析LSM6DSOX有限狀態機官方例程
- 電路圖站2.0版上線,公開征集網友建議,填寫調查問卷贏積分!
- 全球首款Cortex-M23內核物聯網芯片SAML10和SAM L11系列 闖關獲取SAML10/SAML11法寶,拆除電子界安全危機,贏好禮!
- 邀請好友體驗WEBENCH,禮品豐厚你有他也有!