在我們應(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 { 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 閃存編程參考手冊》。
上一篇:STM32中的程序在RAM還是FLASH里運行?
下一篇:stm32存儲結(jié)構(gòu)& 存儲器映射
推薦閱讀
史海拾趣
近年來,帝特積極尋求與行業(yè)內(nèi)優(yōu)秀企業(yè)的合作機會。2024年3月,帝特科技與技象科技在廣州帝特總部簽署戰(zhàn)略合作框架協(xié)議,雙方就物聯(lián)網(wǎng)通信產(chǎn)品展開深入合作。這一合作不僅有助于帝特在物聯(lián)網(wǎng)領(lǐng)域的技術(shù)積累和業(yè)務(wù)拓展,也為公司未來的發(fā)展注入了新的活力。
ATP深知,優(yōu)質(zhì)的產(chǎn)品需要優(yōu)質(zhì)的服務(wù)來支撐。因此,公司一直致力于提升客戶服務(wù)水平,為客戶提供最優(yōu)質(zhì)的產(chǎn)品、最具競爭力的價格和最優(yōu)質(zhì)的服務(wù)。ATP通過建立完善的售后服務(wù)體系,及時解決客戶在使用過程中遇到的問題,贏得了客戶的信任和好評。同時,公司還積極開展市場調(diào)研,了解客戶需求,不斷優(yōu)化產(chǎn)品和服務(wù),以滿足市場的不斷變化。
這五個故事展示了ATP Electronics在電子行業(yè)中的發(fā)展歷程和取得的成就。通過技術(shù)創(chuàng)新、推出工業(yè)級產(chǎn)品、踐行環(huán)保理念、實施全球化戰(zhàn)略以及提升優(yōu)質(zhì)服務(wù),ATP成功地在激烈的市場競爭中脫穎而出,成為了閃存卡市場的領(lǐng)軍企業(yè)。
德芯半導(dǎo)體在成立之初就明確了其市場定位:以高性價比的特色傳感器系列產(chǎn)品為目標(biāo)市場。公司秉承“以德治企,創(chuàng)造精品”的經(jīng)營理念,通過深入了解市場需求,不斷推出符合市場需求的創(chuàng)新產(chǎn)品。在智能家居、智能制造等領(lǐng)域,德芯半導(dǎo)體的產(chǎn)品憑借其高性能、高品質(zhì)和低價格,贏得了國內(nèi)外知名公司的認(rèn)證和合作。
深圳市格萊爾電子有限公司成立于2005年,初期專注于電感產(chǎn)品的研發(fā)與生產(chǎn)。在創(chuàng)始人及團隊的共同努力下,公司迅速在行業(yè)內(nèi)嶄露頭角。隨著技術(shù)的不斷積累和市場需求的擴大,格萊爾逐漸擴大生產(chǎn)規(guī)模,并于2012年在湖北投資建廠,自建兩座工廠,廠房面積達2萬平方米,員工人數(shù)增長至500人。這一系列的舉措不僅提升了公司的生產(chǎn)能力,也為其后續(xù)的發(fā)展奠定了堅實的基礎(chǔ)。
在電子行業(yè)快速發(fā)展的背景下,Carroll & Meynell Transformers Ltd公司始終堅持質(zhì)量第一的原則。公司建立了嚴(yán)格的質(zhì)量管理體系,從原材料采購到生產(chǎn)加工,再到產(chǎn)品出廠,每一個環(huán)節(jié)都經(jīng)過嚴(yán)格的把控。這種對質(zhì)量的執(zhí)著追求使得公司的產(chǎn)品在市場上享有很高的聲譽。許多客戶因為信賴公司的產(chǎn)品質(zhì)量,而與公司建立了長期穩(wěn)定的合作關(guān)系。
隨著國內(nèi)市場的飽和,Carroll & Meynell Transformers Ltd公司開始將目光投向國際市場。公司積極參與國際電子行業(yè)的交流與合作,學(xué)習(xí)借鑒國際先進經(jīng)驗和技術(shù)。同時,公司還加大了對海外市場的拓展力度,通過參加國際展覽、建立海外銷售網(wǎng)絡(luò)等方式,將產(chǎn)品推向全球。這一國際化戰(zhàn)略不僅為公司帶來了更廣闊的市場空間,也提升了公司的國際影響力。
個人覺得這是飛思卡爾提供的針對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 ...… 查看全部問答∨ |
我用stm32fs103cb芯片編了段,要與主機串口通信getkey,進行判斷后進行處理數(shù)據(jù)。但在buf區(qū)始終無法得到我要的鍵值。請大蝦幫忙!!具體代碼如下: int main (void) { int uart3_ok = 0; int j3; int i,j; ...… 查看全部問答∨ |
最近有個任務(wù),是需要為一個usb板子寫驅(qū)動程序,業(yè)務(wù)邏輯非常簡單,就是外設(shè)和主機的雙向數(shù)據(jù)通信,數(shù)據(jù)沒有任何格式,也不屬于已知的任何一種usb外設(shè)類型。 外設(shè)板子的程序很簡單,就是初始化usb,然后在device descripotr里面指定 vendorid,pro ...… 查看全部問答∨ |
老板讓我為“嵌入式矢量圖形終端”選擇開發(fā)板,使用Linux系統(tǒng)。要求外接顯示器,分辨率至少1024x768,越大越好。系統(tǒng)整體速度越快越好,但要控制成本比同檔次PC機低。 我網(wǎng)上查了一下,找到兩種系統(tǒng)滿足要求: ARM系統(tǒng): &nb ...… 查看全部問答∨ |
設(shè)計資源 培訓(xùn) 開發(fā)板 精華推薦
- 人形機器人馬拉松背后的思考,兆易創(chuàng)新如何賦能機器人產(chǎn)業(yè)
- 一種基于STM32的智能柜控制器設(shè)計
- 小型傾轉(zhuǎn)旋翼機的無刷直流電機驅(qū)動器設(shè)計
- 超高速攝影機電控系統(tǒng)設(shè)計
- 基于GPS自動授時的無線智能控制器的設(shè)計
- 基于PTR2000的無線氣象信息采集系統(tǒng)設(shè)計
- Microchip推出MEC175xB系列器件,為嵌入式控制器引入硬件 抗量子攻擊能力
- 無人飛行器機載穩(wěn)定云臺控制系統(tǒng)的設(shè)計
- 匠芯創(chuàng)推出面向具身智能高性能實時處理器M7000
- 利用驗證框架 JAIST揭示開源自動駕駛系統(tǒng)的安全漏洞
- 現(xiàn)代汽車集團擬采用VR模擬器替代道路測試 提升未來車型的競爭力
- 研究人員開發(fā)光驅(qū)動致動器 可用于驅(qū)動水下機器人
- 吉利將發(fā)射“千里浩瀚”衛(wèi)星,實現(xiàn)輔助駕駛系統(tǒng)與衛(wèi)星功能深度融合
- 以鴻道工業(yè)操作系統(tǒng)為核心 打造工業(yè)智能機器人新生態(tài)
- UNIST研發(fā)出新表面處理技術(shù) 延長下一代鋰金屬電池的壽命
- 車載SerDes芯片行業(yè)的"DeepSeek"時刻——瑞發(fā)科HSMT SerDes閃耀2025上海車展
- 豐田顛覆傳統(tǒng),固態(tài)電池明年就能量產(chǎn),最受傷的將是中國?
- 基于恩智浦與onsemi的駕駛員監(jiān)控系統(tǒng)方案
- 機器人行業(yè)周報|5月27日:宇樹G1格斗賽、人形機器人技術(shù)與場景融合趨勢
- 兆易創(chuàng)新GD32F350創(chuàng)新設(shè)計大賽
- 兆易創(chuàng)新GD32F350創(chuàng)新設(shè)計大賽
- 大學(xué)堂學(xué)分閃亮登場 看誰率先登上光榮榜!
- RT-THREAD 開發(fā)者大會
- 電子工程師,如何更好地?fù)肀aN?參與問卷有好禮!
- 是德科技有獎直播:灣區(qū)圓桌派-穿越頻譜壁壘:毫米波技術(shù)的創(chuàng)新之路
- WEBENCH輕松注冊,盡享精彩好禮!
- ADI有獎下載活動之24:ADI公司醫(yī)療X射線成像解決方案
- 下載有禮:多通道高精度信號生成必殺器--最新AWG5200信號發(fā)生器