使用STM32进行Flash地址空间的数据读取
Flash地址空間的數據讀取。stm32f103c8t6只有20KB 內存(RAM)供程序代碼和數組變量存放,因此,針對內部Flash的總計64KB存儲空間(地址從0x08000000開始),運行一次寫入8KB數據,總計復位運行代碼4次,將32KB數據寫入Flash。并驗證寫入數據的正確性和讀寫速率。
目錄
- 一、STM32的內存映射
- 二、內部Flash的構成
- 三、工程實現
- 1、工程代碼
- 2、安裝驅動
- 3、配置
- 4、觀察結果
- 四、實驗總結
- 參考文獻
一、STM32的內存映射
在了解flash之前,我們先來看一下STM32的內存映射。
首先,需要區分的就是RAM和Flash
- stm32的flash地址起始于0x0800 0000,結束地址是0x0800
0000加上芯片實際的flash大小,不同的芯片flash大小不同。 - RAM起始地址是0x2000 0000,結束地址是0x2000 0000加上芯片的RAM大小。不同的芯片RAM也不同。
- Flash中的內容一般用來存儲代碼和一些定義為const的數據,斷電不丟失,
- RAM可以理解為內存,用來存儲代碼運行時的數據,變量等等。掉電數據丟失。
一般情況下,程序文件是從 0x0800 0000 地址寫入,這個是STM32開始執行的地方,0x0800 0004是STM32的中斷向量表的起始地址。
程序的寫入地址從0x08000000開始的,其大小為0x80000也就是512K的空間,換句話說就是告訴編譯器flash的空間是從0x08000000-0x08080000,RAM的地址從0x20000000開始,大小為0x10000也就是64K的RAM。這與STM32的內存地址映射關系是對應的。
二、內部Flash的構成
不同型號的 STM32,其 FLASH 容量也有所不同,最小的只有 16K 字節,最大的則達到了 1024K 字節。
查看Flash容量的分類,可以發現:
STM32F103C8T6是屬于中等容量的設備,64K的flash可以存儲64*1024個字節的數據。
現在我們的任務是將信息保存在STM32自帶的內部flash中,看看是否可以操作。
三、工程實現
這里使用的是已經配置好的工程文件,參考博客地址如下:
https://blog.csdn.net/zhanglifu3601881/article/details/96632971
1、工程代碼
確保文件中含有flash.h文件和flash.c文件(flash.h文件放在INC文件夾中即可)
在main.c文件中加入如下代碼
編譯運行,沒有錯誤
2、安裝驅動
注意這次實驗是硬件仿真,多以需要用到硬件st-link-debuger
ST-LINK是一個用于STM8和STM32微控制器系列的在線調試器和編程器
先要確保安裝了STLink驅動,連接如下:
鏈接:https://pan.baidu.com/s/1yDqUexEoDS4zPzk54IVNrA
提取碼:ure0
下載點開文件夾,直接點擊其中的.exe文件,默認選擇安裝就好
將STLink連接STM32連接到電腦上,打開設備管理器,查看通用串行總線設備,出現STM32 STLink,說明成功連接
3、配置
連接 STLink需要配置點擊Options
在菜單欄中找到Debug一欄,在右側Use一欄中的下拉菜單中選擇ST-Link Debugger,然后點擊右側的Settings
設置Port為SW
ARM芯片有兩種調試模式,一種是JTAG,一種是SWD,二者在管腳上有復用。
點擊菜單欄中的Flash Download
選擇Reset and Run
點擊最下方的Add,添加一個Programming Algorithm,選擇下圖3號框中框選的內容
最后點擊確定
4、觀察結果
然后點擊Start Debug,調試程序
可以看到程序運行到圖片所示的位置
按如下路徑:View->memory windows->memory 1
打開內存觀察窗口
在地址欄中輸入0x800c000,觀察要修改的flash區間的內容
按路徑View->Watch windows->Watch 1打開一個變量觀察窗口
可以看到FlashWBuff和FlashRBuff
對應的正式main.c中的寫入和寫出,現在看看二者是否一致
菜單欄中選擇View->Periodic Windows Update開啟變量自動更新:
然后按鍵F5,全速運行程序,可以看到數組FlashRBuff中內容與數組FlashWBuff中內容一樣了
此時,在Memory 1窗口中可以看到在FLASH地址0x0800C000區成功寫入對應內容
斷電,重新上電后再次調試,程序剛停在main入口處時應該還可以看到Flash對應區間的內容保持上一次寫入內容值
四、實驗總結
在這次的實驗中我學會了Flash地址空間的數據讀取。在最開始做實驗的時候,關于硬件連接遇到了一些小問題,但是很快就解決了,總體來說,比較順利。該實驗為我做之后的實驗打下了基礎。
參考文獻
https://www.cnblogs.com/pertor/p/9484663.html
https://blog.csdn.net/zhanglifu3601881/article/details/96632971
總結
以上是生活随笔為你收集整理的使用STM32进行Flash地址空间的数据读取的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: weka使用训练集分类测试集_weka实
- 下一篇: mysql最大句柄数_【mysql】最大