您現在的位置是:首頁 > 棋牌

STM32在SRAM、FLASH中除錯程式碼的配置方法(附詳細步驟)

  • 由 嵌入式大雜燴 發表于 棋牌
  • 2022-06-21
簡介其它的按預設設定即可,然後點選Settings,並進行如下設定:圖中我們需要勾選Verify Code Download及Download to FLASH選項,也就是說點選除錯按鈕後,本工程的程式會被下載到內部 SRAM 中,只有勾選了這

做好的flash怎麼改尺寸

因為STM32的FLASH擦寫次數有限(大概為1萬次),所以為了延長FLASH的使用時間,我們平時除錯時可以選擇在SRAM中進行硬體除錯。除此之外,SRAM 儲存器的寫入速度比在內部 FLASH 中要快得多,所以下載程式到SRAM中的速度較快。

所以我們很有必要建立兩個版本的工程配置,在SRAM中除錯程式完畢後,再把程式碼下載到FLASH中即可。這篇筆記主要分享在keil5中配置FLASH除錯與SRAM除錯的詳細配置方法及如何切換兩種配置。

本篇筆記以STM32F103ZET6為例。其FLASH大小為512KB,SRAM的大小為64KB。FLASH基地址為0x08000000,SRAM基地址為0x20000000。在STM32F10XXX裡,可以透過BOOT1、BOOT0引腳來選擇三種不同的模式:

STM32在SRAM、FLASH中除錯程式碼的配置方法(附詳細步驟)

我們要在FLASH中進行硬體模擬除錯還是在RAM中進行硬體模擬除錯需要對這兩個boot腳進行對應的設定以及程式下載的地址進行設定。

在FLASH中進行硬體模擬除錯

1、硬體設定

BOOT0配置為0,BOOT1隨意設定。

2、keil設定

本文以keil5為例。步驟如下:

(1)點選如下按鈕,修改target的名稱:

STM32在SRAM、FLASH中除錯程式碼的配置方法(附詳細步驟)

STM32在SRAM、FLASH中除錯程式碼的配置方法(附詳細步驟)

target的名稱是可以隨意更改的,我們這裡改為FLASH。

(2)點選Project->Options for Target Flash。。。(也可以點選魔術棒那個圖示)進行配置。首先對Target選項卡設定:

STM32在SRAM、FLASH中除錯程式碼的配置方法(附詳細步驟)

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

(3)Debug選項設定:

STM32在SRAM、FLASH中除錯程式碼的配置方法(附詳細步驟)

偵錯程式根據實際進行選擇,我們這裡使用的偵錯程式是ULINK2。其它的按預設設定即可,然後點選Settings:

STM32在SRAM、FLASH中除錯程式碼的配置方法(附詳細步驟)

STM32在SRAM、FLASH中除錯程式碼的配置方法(附詳細步驟)

STM32在SRAM、FLASH中除錯程式碼的配置方法(附詳細步驟)

STM32在SRAM、FLASH中除錯程式碼的配置方法(附詳細步驟)

(4)編譯,然後按Ctrl+F5進入除錯介面:

STM32在SRAM、FLASH中除錯程式碼的配置方法(附詳細步驟)

然後點選全速執行:

STM32在SRAM、FLASH中除錯程式碼的配置方法(附詳細步驟)

在Disassembly視窗中可看到地址為0x0800xxxx,說明程式碼燒進了FLASH中,這時候就可以像使用其他C語言IDE除錯C語言程式一樣打斷點、單步執行我們的STM32程式啦。

在SRAM中進行硬體模擬除錯

在SRAM的模擬除錯配置比FLASH中的配置要麻煩一點,我配置的時候遇到不少問題~

1、硬體設定

BOOT0配置為1,BOOT1配置為1。

2、keil設定

(1)新建一個target,並修改名稱為SRAM:

STM32在SRAM、FLASH中除錯程式碼的配置方法(附詳細步驟)

(2)切換至SRAM Target:

STM32在SRAM、FLASH中除錯程式碼的配置方法(附詳細步驟)

(3)點選Project->Options for Target SRAM 。。。(也可以點選魔術棒那個圖示)Target選項卡設定:

STM32在SRAM、FLASH中除錯程式碼的配置方法(附詳細步驟)

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

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

STM32在SRAM、FLASH中除錯程式碼的配置方法(附詳細步驟)

為什麼在RAM中除錯要設定這個宏而在FLASH中除錯卻不需要?這是因為我們的中斷向量表預設位於FLASH中,而此時我們要在RAM中進行除錯,所以需要把中斷向量表複製到RAM中,相關程式碼在system_stm32f10x。c的SystemInit函式中:

STM32在SRAM、FLASH中除錯程式碼的配置方法(附詳細步驟)

其實system_stm32f10x。c檔案中也有宏VECT_TAB_SRAM相關的程式碼:

STM32在SRAM、FLASH中除錯程式碼的配置方法(附詳細步驟)

把這行程式碼開啟即可把中斷向量表複製到RAM中。但是這裡選擇在C/C++選項選項裡新增宏,因為這樣可以保證SRAM版本與FLASH版本程式碼的一致性。

(5)Debug設定:

與在FLASH中除錯不同的是,這裡需要加入。ini檔案:

STM32在SRAM、FLASH中除錯程式碼的配置方法(附詳細步驟)

這個。ini可以自己建立(也可以在晶片支援包裡找到),這裡我們建為Dbg_RAM。ini。檔案裡的內容如下:

STM32在SRAM、FLASH中除錯程式碼的配置方法(附詳細步驟)

其中這裡的第11行是需要根據實際進行修改的,需要把工程編譯得出的。axf格式檔案的路徑及其檔名填到這裡。這裡因為我們這裡的的。ini檔案在。axf的上一級目錄:

STM32在SRAM、FLASH中除錯程式碼的配置方法(附詳細步驟)

所以此處以。/Objects來表示。如果覺得麻煩的話,可以把。axf檔案與。ini放在同一個目錄下。

其它的按預設設定即可,然後點選Settings,並進行如下設定:

STM32在SRAM、FLASH中除錯程式碼的配置方法(附詳細步驟)

圖中我們需要勾選Verify Code Download及Download to FLASH選項,也就是說點選除錯按鈕後,本工程的程式會被下載到內部 SRAM 中,只有勾選了這兩個選項才能正常模擬。 (至於為什麼 FLASH 版本的程式不需要勾選,不太清楚) 。

STM32在SRAM、FLASH中除錯程式碼的配置方法(附詳細步驟)

Download Function中的擦除選項配置為Do not Erase。這是因為資料寫入到內部 SRAM 中不需要像 FLASH 那樣先擦除後寫入。 Programming Algorithm 的地址要與我們Target選項卡里設定的地址一致,否則可能會出現如下錯誤:

STM32在SRAM、FLASH中除錯程式碼的配置方法(附詳細步驟)

(6)編譯,然後按Ctrl+F5進入除錯介面,然後點選全速執行:

STM32在SRAM、FLASH中除錯程式碼的配置方法(附詳細步驟)

在Disassembly視窗中可看到地址為0x2000xxxx,說明程式碼燒進了SRAM中,這時候就可以像使用其他C語言IDE除錯C語言程式一樣打斷點、單步執行我們的STM32程式啦。

以上就是在FLASH中除錯與在SRAM中除錯的設定方法,除錯程式碼時可以選擇SRAM版本的配置,除錯完成再切換回FLASH版本的配置,把程式下載到FLASH中。切換方法:

STM32在SRAM、FLASH中除錯程式碼的配置方法(附詳細步驟)

在RAM中除錯的優缺點

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

優點:

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

2、不改寫內部 FLASH 的原有程式。

3、對於內部 FLASH 被鎖定的晶片,可以把解鎖程式下載到 RAM 上,進行解鎖。

缺點:

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

2、SRAM空間較小。

以上就是本次分享的關於RAM除錯與FLASH除錯的筆記。如有錯誤歡迎指出!謝謝

Top