STM32實現掉電儲存多個資料(FLASH)

2021-10-08 05:09:19 字數 1999 閱讀 3183

2.flash寫入多個數

3.讀取flash中儲存的數值

一、初步認識flash

如果想要實現掉電儲存,首要的任務就是找到乙個地方可以存放這些資料,當這些資料發生改變的時候,把資料存放進去,並且保證上電後不會被擦除。這麼一來,等在次上電之後,通過讀取掉電前儲存的資料,實現掉電儲存功能。

可以存放資料的地方可分為在兩種片上flash和片外flash,常見的片上快閃儲存器有eeprom,片外的儲存晶元有w25q***。本篇文章使用的是直接在flash中儲存。根據不同的晶元型別,快閃儲存器的大小都是不一樣的。如下圖(其他部落格擷取來的):

主控晶元的記憶體一般可分為8塊:存放初始化程式的固化部分、資料段、**段、堆空間、棧空間等。掉電儲存資料的地方在第0塊中的某個位置(0x0800 0000 ~0x0808 0000,這個的大小對應晶元快閃儲存器大小)只要存放的資料不超出這個範圍,一切都好說。

二、flash寫入資料

通過對上面的了解,大概知道了存放的位置。之後就可以向這個位置裡面為所欲為啦?當然不是。下面以stm32標準庫為例,你需要在工程裡面加入stm32f10x_flash.c檔案,這個檔案抱恨了很多對flash操作的方法,我們只需要呼叫這些方法才可以為所欲為。(膜拜驅動大佬)。

怎麼實現為所欲為呢?一般有兩種:讀和寫。

寫入:檢查狀態–>解鎖–>擦除–>寫入–>上鎖–>完事。

讀取:解鎖–>讀取–>上鎖–>完事。

/*

功能:向flash中寫入資料

返回值:

*/void

flash_writebyte

(u32 addr ,uint64_t *flashdata1,uint8_t len)

flash_lock()

;//上鎖

}

有了這個函式之後,在封裝乙個函式,把想要儲存的變數資料對應放到乙個陣列裡面,然後將整乙個陣列寫到flash中,實現最終的寫入功能。

三、讀取flash中儲存的資料

通過上面的寫入函式,就可以把資料寫入到flash中了,之後找到同乙個位址,將資料讀取出來,讀取的長度和寫進去的長度一致,之後將資料存到乙個陣列當中,再將陣列的值對應賦值給儲存進來的時的變數,就可以實現讀取功能。

/*

返回值:無

*/void

read_flash

(uint32_t addr,uint8_t len)

; u8 i=0;

uint64_t rdata =0;

flash_unlock()

;//解鎖flash

for(i=

0;i)flash_lock()

;//上鎖

/*********** 重新賦值給變數 ********/

s_num = new_pararry[0]

; f_num = new_pararry[1]

; r_num = new_pararry[2]

; total = new_pararry[3]

;

i_reg = new_pararry[4]

; vl_reg = new_pararry[5]

; vh_reg = new_pararry[6]

; t_reg = new_pararry[7]

; line1 = new_pararry[8]

; line2 = new_pararry[9]

; line3 = new_pararry[10]

; line4 = new_pararry[11]

; line5 = new_pararry[12]

;}

STM32多個串列埠printf

網上講的新增printf 到程式中一般都是這樣的 簡要提一下 1.配置gpio usart,rcc 的configuration 2.勾選usb micro lib 3.在程式中新增 標頭檔案需要新增 include ifdef gnuc define putchar prototype int i...

stm32晶元休眠模式 stm32實現待機喚醒

stm32的低功耗模式有3種 1 睡眠模式 cm3核心停止,外設仍然執行 2 停機模式 所有時鐘都停止 3 待機模式 1.8v核心電源關閉 進入待機模式的方法,以及設定wk up引腳用於把stm32從待機模式喚醒的方法 一般步驟如下 1 設定sleepdeep位 scb scr的第二位 2 使能電源...

STM32儲存結構(2)

當我們在完成某乙個實驗,當我們正慶幸的時候,我們不由得產生一種不安的想法 我們是否已經少許明白其中的種種細節?尤其,當我們所有的事情都依賴於編譯環境或firmware,抑或他人的程式,而自己僅僅是copy和modify,以致using。當你還是乙個初學者的時候,或許不會太過於關注於此,但是要想提高自...