在嵌入式應用開發中,經常會遇到掉電后還要保存的資訊,這些資訊通常只能保存在外部的一些存盤芯片中,如外部flash,外部EEPROM, 其實這些資訊同樣可以保存在STM32自帶的內部flash中
文章目錄
- 一、STM32 的內部 FLASH 簡介
- 二、工程驗證
- 三、小結
- 四、參考鏈接
一、STM32 的內部 FLASH 簡介
在 STM32 芯片內部有一個 FLASH 存盤器,它主要用于存盤代碼,我們在電腦上撰寫好應用程式后,使用下載器把編譯后的代碼檔案燒錄到該內部 FLASH 中,由于 FLASH 存盤器的內容在掉電后不會丟失,芯片重新上電復位后,內核可從內部 FLASH 中加載代碼并運行,
根據用途,STM32 片內的 FLASH 分成兩部分:主存盤塊和資訊塊,
主存盤塊用于存盤程式,我們寫的程式一般存盤在這里;
資訊塊又分成兩部分:系統存盤器、選項位元組, 系統存盤器存盤用于存放在系統存盤器自舉模式下的啟動程式(BootLoader),當使用 ISP 方式加載程式時,就是由這個程式執行,這個區域由芯片廠寫入 BootLoader,然后鎖死,用戶是無法改變這個區域的, 選項位元組存盤芯片的配置資訊及對主存盤塊的保護資訊,

除了使用外部的工具(如下載器)讀寫內部 FLASH 外,STM32 芯片在運行的時候,也能對自身的內部 FLASH 進行讀寫,因此,若內部 FLASH 存盤了應用程式后還有剩余的空間,我們可以把它像外部 SPI-FLASH 那樣利用起來,存盤一些程式運行時產生的需要掉電保存的資料,
由于訪問內部 FLASH 的速度要比外部的 SPI-FLASH 快得多,所以在緊急狀態下常常會使用內部 FLASH 存盤關鍵記錄;為了防止應用程式被抄襲,有的應用會禁止讀寫內部FLASH 中的內容,或者在第一次運行時計算加密資訊并記錄到某些區域,然后洗掉自身的部分加密代碼,這些應用都涉及到內部 FLASH 的操作,
二、工程驗證
flash工程下載鏈接:https://pan.baidu.com/s/11Tn8TocHT8qithneDyKFIQ
提取碼:pmvn
下載完成后打開檔案夾,將路徑stm32_Flash\Drivers\CMSIS\Device\ST\STM32F1xx\Include下的system_stm32f1xx_20190722_092746.h檔案修改為system_stm32f1xx.h,否則后面編譯會報錯

修改好后,打開工程,可以將想要存入Flash中的內容修改為自定義內容
uint8_t FlashTest[] = "Hello!631907030123";
編譯無報錯
進行程式除錯前,先完成配置:
注意:下載的工程代碼除錯用的是硬體 st-link debuger,不是軟體仿真,因此用軟體仿真做,可能情況略有不同(小編這里軟體仿真就沒有出現結果)
點擊Options->Debug->右邊使用硬體ST-Link Debugger

接著點擊S T-Link Debugger右邊的Settings

進入到Cortex-M Target Driver Setup的Debug頁面,其中的Port選擇為SW

依次點擊Flash Download->勾選Reset and Run->Add->選擇STM32F10x Med-density Flash->Add->確定即可

最后點擊OK完成硬體配置
由于要連接硬體ST-Link,所以要下載一個STLink驅動,不然下載不成功
鏈接:https://pan.baidu.com/s/13k0PVQfg5qAHXBKJ2IZiYA
提取碼:1234
連線如下圖

點擊左上角的LOAD按鈕將程式下載到STM32中

現在點擊dubug按鈕,進入硬體仿真除錯

點擊View->memory windows->memory 1打開記憶體觀察視窗,并在地址欄中輸入:0x800C000,觀察將要修改的flash區間區容:

其中點擊某一字符右擊可選擇顯示格式

繼續View->Watch windows->Watch 1打開一個變數觀察視窗

將變數FlashWBuff 和FlashRBuff加入到Watch 1觀察視窗


另外View->勾選Periodic Windows Update,開啟變數自動更新

按如圖所示的全速運行按鈕或者F5

這時就可以看到Watch 1視窗的陣列FlashRBuff中的內容與陣列FlashWBuff中的內容是一樣的

同時在Memory 1視窗中可以看到在FLASH地址0x0800C000區成功寫入對應內容

斷電后再重新上電進行除錯,程式停在main入口處時還可以看到Flash對應區間的內容保持上一次寫入內容值

三、小結
完成本次實驗內容后,對STM32 的內部 FLASH 有了一定的了解,明白了FLASH 的基本功能后,以后基于STM32的開發就可以省去一些外部FLASH或EEPROM了,
四、參考鏈接
1.https://blog.csdn.net/zhanglifu3601881/article/details/96632971
2.https://www.eefocus.com/embedded/399467
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/392244.html
標籤:其他
