關(guān)于STM32片上Flash讀寫操作,之前很多朋友遇到過坑,也問過很多相關(guān)的問題,這里再簡單總結(jié)一下。
1寫在前面
STM32片上Flash除了存儲(chǔ)我們的代碼,多余的空間還可以供我自己編程(讀寫)。比如,存儲(chǔ)標(biāo)志位、字庫等。
如果對片上Flash讀寫操作不當(dāng),將會(huì)導(dǎo)致不可挽回的結(jié)局。比如:修改了應(yīng)用程序代碼導(dǎo)致程序跑飛,非對其操作導(dǎo)致異常中斷等。
因此,我們對片上Flash讀寫操作時(shí),一定要避免一些錯(cuò)誤的做法。下面將講述一些關(guān)于STM32片上Flash的知識,讓大家掌握更多相關(guān)知識。
2
Flash閃存接口
STM32片上Flash閃存接口是在AHB協(xié)議上實(shí)現(xiàn)了對指令和數(shù)據(jù)的訪問,它通過對存儲(chǔ)器的預(yù)取緩存,加快了存儲(chǔ)器的訪問;
閃存接口還實(shí)現(xiàn)了在所有工作電壓下對閃存編程和擦除所需的邏輯電路,這里還包括訪問和寫入保護(hù)以及選項(xiàng)字節(jié)的控制。
內(nèi)置閃存模塊可以在通用地址空間直接尋址,任何32位數(shù)據(jù)的讀操作都能訪問閃存模塊的內(nèi)容并得到相應(yīng)的數(shù)據(jù)。
3
STM32片上Flash容量
STM32片上Flash容量大小與芯片的型號有關(guān),具體大小可以參看命名規(guī)則:
而我們也可以通過讀取Flash容量寄存器,或通過STM32 ST-LINK Utility工具獲取芯片容量。具體可以參看我的另一篇文章《關(guān)于STM32的這幾個(gè)寄存器》
4
Flash閃存模塊的組織
STM32的Flash,有的是分頁,而有的卻是分塊,具體可以查閱“參考手冊”。
比如:STM32F0、 F1、 F3、 L1等就是按Page頁來劃分的,如下圖:

而像STM32F2、F4等就是按Sector扇區(qū)來劃分,如下圖:

所以,如果移植代碼,從Page頁移植到Sector扇區(qū),或者從Sector扇區(qū)移植到Page頁,這部分底層代碼必須要修改才行。
5
非對其寫操作
STM32為32位的MCU,即4個(gè)字節(jié)。如果不是按照4個(gè)字節(jié)的寫Flash,將導(dǎo)致Faults異常。
寫Flash過程:

這里大家可以參看我之前分享的文章:
1.位帶別名區(qū)最低有效位
2.談?wù)凷TM32(CM3)的Faults異常
6
寫操作不響應(yīng)代碼或數(shù)據(jù)讀取
對STM32內(nèi)部FLash的寫操作,相對于執(zhí)行指令是比較耗時(shí)的。從數(shù)據(jù)手冊可以得出16位數(shù)據(jù)編程時(shí)間再40 --- 70us。

從STM32編程手冊中,可以知道:在進(jìn)行寫或擦除操作時(shí),不能進(jìn)行代碼或數(shù)據(jù)的讀取操作。
比如:你在寫Flash期間有接收串口數(shù)據(jù),很有可能會(huì)丟串口數(shù)據(jù)。
因?yàn)楸容^耗時(shí),所以,在寫數(shù)據(jù)時(shí),CPU不會(huì)執(zhí)行其他操作。
簡單說:在寫Flash時(shí),CPU 不能取指令,導(dǎo)致中斷得不到及時(shí)響應(yīng),從而發(fā)生接收到的數(shù)據(jù)未及時(shí)讀走而被覆蓋的現(xiàn)象。
遇到這種情況,解決的辦法:使用DMA。DMA不需要CPU干預(yù),一旦 USART 有數(shù)據(jù)接收到,由 DMA 負(fù)責(zé)將其傳輸至循環(huán)緩沖區(qū)中。軟件定期檢測循環(huán)緩沖區(qū)中是否有接收到的數(shù)據(jù),如果有則加以處理。
提示:
如果你的代碼會(huì)反復(fù)讀Flash,建議使用外部Flash。
-
mcu
+關(guān)注
關(guān)注
147文章
18588瀏覽量
385914 -
FlaSh
+關(guān)注
關(guān)注
10文章
1714瀏覽量
154632 -
STM32
+關(guān)注
關(guān)注
2305文章
11118瀏覽量
370931
發(fā)布評論請先 登錄
貼片電容精度J±5%的一些詳細(xì)知識
PI加熱片知識FAQ
STM32C011開發(fā)(3)----Flash操作
當(dāng)不同的數(shù)據(jù)放在同一個(gè)Flash頁面上時(shí),請問如何在不影響其他數(shù)據(jù)的情況下更改一些單獨(dú)的數(shù)據(jù)?
SPI NOR FLASH是什么,與SPI NAND Flash的區(qū)別
求助,關(guān)于STM32F407的flash讀寫問題求解
第二十九章 讀寫內(nèi)部FLASH
關(guān)于芯片設(shè)計(jì)的一些基本知識

STM32片上Flash讀寫一些重要知識
評論