在SRAM、FLASH中調試代碼的配置方法(附詳細步驟)

由於STM32的FLASH擦寫次數有限(大概爲1萬次),因此爲了延長FLASH的使用時間,咱們平時調試時能夠選擇在SRAM中進行硬件調試。除此以外,SRAM 存儲器的寫入速度比在內部 FLASH 中要快得多,因此下載程序到SRAM中的速度較快。git

因此咱們頗有必要創建兩個版本的工程配置,在SRAM中調試程序完畢後,再把代碼下載到FLASH中便可。這篇筆記主要分享在keil5中配置FLASH調試與SRAM調試的詳細配置方法及如何切換兩種配置。github

本篇筆記以STM32F103ZET6爲例。其FLASH大小爲512KB,SRAM的大小爲64KB。FLASH基地址爲0x08000000,SRAM基地址爲0x20000000。在STM32F10XXX裏,能夠經過BOOT一、BOOT0引腳來選擇三種不一樣的模式:sass

咱們要在FLASH中進行硬件仿真調試仍是在RAM中進行硬件仿真調試須要對這兩個boot腳進行對應的設置以及程序下載的地址進行設置。微信

在FLASH中進行硬件仿真調試

一、硬件設置函數

BOOT0配置爲0,BOOT1隨意設置。spa

二、keil設置3d

本文以keil5爲例。步驟以下:調試

(1)點擊以下按鈕,修改target的名稱:code

target的名稱是能夠隨意更改的,咱們這裏改成FLASH。blog

(2)點擊Project->Options for Target Flash...(也能夠點擊魔術棒那個圖標)進行配置。首先對Target選項卡設置:

設置IROM1的起始地址爲0x8000000,大小爲0x80000,即FLASH的基地址與大小。設置IRAM1爲0x20000000,大小爲0x10000,即SRAM的基地址與大小。

(3)Debug選項設置:

調試器根據實際進行選擇,咱們這裏使用的調試器是ULINK2。其它的按默認設置便可,而後點擊Settings:

(4)編譯,而後按Ctrl+F5進入調試界面:

而後點擊全速運行:

在Disassembly窗口中可看到地址爲0x0800xxxx,說明代碼燒進了FLASH中,這時候就能夠像使用其餘C語言IDE調試C語言程序同樣打斷點、單步運行咱們的STM32程序啦。

在SRAM中進行硬件仿真調試

在SRAM的仿真調試配置比FLASH中的配置要麻煩一點,我配置的時候遇到很多問題~

一、硬件設置

BOOT0配置爲1,BOOT1配置爲1。

二、keil設置

(1)新建一個target,並修更名稱爲SRAM:

(2)切換至SRAM Target

(3)點擊Project->Options for Target SRAM ...(也能夠點擊魔術棒那個圖標)Target選項卡設置:

設置IROM1的起始地址爲0x2000000,大小爲0x8000(32KB);設置IRAM1的起始地址爲0x2008000,大小爲0x8000(32KB)。即把64KB的SRAM分爲32KB的FLASH(固然這是SRAM虛擬出來的FLASH,掉電易失)和16KB的RAM。

(4)C/C++選項設置:

爲何在RAM中調試要設置這個宏而在FLASH中調試卻不須要?這是由於咱們的中斷向量表默認位於FLASH中,而此時咱們要在RAM中進行調試,因此須要把中斷向量表拷貝到RAM中,相關代碼在system_stm32f10x.cSystemInit函數中:

其實system_stm32f10x.c文件中也有宏VECT_TAB_SRAM相關的代碼:

把這行代碼打開便可把中斷向量表拷貝到RAM中。可是這裏選擇在C/C++選項選項裏添加宏,由於這樣能夠保證SRAM版本與FLASH版本代碼的一致性。

(5)Debug設置:

與在FLASH中調試不一樣的是,這裏須要加入.ini文件:

這個.ini能夠本身建立(也能夠在芯片支持包裏找到),這裏咱們建爲Dbg_RAM.ini。文件裏的內容以下:

其中這裏的第11行是須要根據實際進行修改的,須要把工程編譯得出的.axf格式文件的路徑及其文件名填到這裏。這裏由於咱們這裏的的.ini文件在.axf的上一級目錄:

因此此處以./Objects來表示。若是以爲麻煩的話,能夠把.axf文件與.ini放在同一個目錄下。

其它的按默認設置便可,而後點擊Settings,並進行以下設置:

圖中咱們須要勾選Verify Code DownloadDownload to FLASH選項,也就是說點擊調試按鈕後,本工程的程序會被下載到內部 SRAM 中,只有勾選了這兩個選項才能正常仿真。 (至於爲何 FLASH 版本的程序不須要勾選,不太清楚) 。

Download Function中的擦除選項配置爲Do not Erase。這是由於數據寫入到內部 SRAM 中不須要像 FLASH 那樣先擦除後寫入。 Programming Algorithm 的地址要與咱們Target選項卡里設置的地址一致,不然可能會出現以下錯誤:

(6)編譯,而後按Ctrl+F5進入調試界面,而後點擊全速運行:

在Disassembly窗口中可看到地址爲0x2000xxxx,說明代碼燒進了SRAM中,這時候就能夠像使用其餘C語言IDE調試C語言程序同樣打斷點、單步運行咱們的STM32程序啦。

以上就是在FLASH中調試與在SRAM中調試的設置方法,調試代碼時能夠選擇SRAM版本的配置,調試完成再切換回FLASH版本的配置,把程序下載到FLASH中。切換方法:

在RAM中調試的優缺點

如下來自《【野火】零死角玩轉STM32—F429挑戰者V2.pdf》。

優勢:

一、載程序很是快。 RAM 存儲器的寫入速度比在內部 FLASH 中要快得多,且沒有擦除過程,所以在 RAM 上調試程序時程序幾乎是秒下的,對於須要頻繁改動代碼的調試過程,能節約不少時間,省去了煩人的擦除與寫入 FLASH 過程。另外,STM32 的內部 FLASH 可擦除次數爲 1 萬次,雖然通常的調試過程都不會擦除這麼屢次致使 FLASH 失效,但這確實也是一個考慮使用 RAM 的因素。

二、不改寫內部 FLASH 的原有程序。

三、對於內部 FLASH 被鎖定的芯片,能夠把解鎖程序下載到 RAM 上,進行解鎖。

缺點:

一、存儲在 RAM 上的程序掉電後會丟失,不能像 FLASH 那樣保存。

二、SRAM空間較小。

以上就是本次分享的關於RAM調試與FLASH調試的筆記,更多的相關原理、細節可查閱《【野火】零死角玩轉STM32—F429挑戰者V2.pdf》。可在本公衆號嵌入式大雜燴聊天界面回覆關鍵字:調試,進行獲取本筆記對應工程及《【野火】零死角玩轉STM32—F429挑戰者V2.pdf》。本篇筆記若有錯誤歡迎指出!謝謝

個人我的博客:https://zhengnianli.github.io/

個人微信公衆號:嵌入式大雜燴

相關文章
相關標籤/搜索