STM32程式下載到SRAM偵錯方法

2020-08-08 13:10:31

STM32程式下載到SRAM偵錯方法


偵錯程式時,我們通常是把程式載入到STM32的flash,然後偵錯。因爲flash本省的寫入次數是有限的,且市面上很多STM32是拆機片,flash的寫入次數就是更嚴重的問題。
下面 下麪介紹的方法,是在偵錯時,程式下載到flash執行的方案,偵錯完成後,程式寫入flash正式發行。

  1. Project manager裏面增加一個編譯目標選項。如led表示正式的發行編譯方案,SRAM表示偵錯編譯選項。
    编译选项设定1
    编译选项设定2

  2. 把RAM空間切分成兩部分,第一部分模擬ROM儲存程式碼,第二部分作爲RAM使用。切多大呢?保險的話查編譯輸出,Code+RO-data需要放ROM裏面,劃分的ROM空間要大於這個數。也可以按照經驗,對半砍,保險的話,按照上述方法進行確認。
    编译结果

  3. 空間切分好之後,把參數寫入OptionsTarget頁,IROM要用RAM的起始地址,按照第1步劃分的大小填寫。IRAM空間緊接其後。
    Target页面设定

  4. 記住output頁設定的執行檔名稱
    输出文件名设定

  5. **C/C++**頁面,Define需要加VECT_TAB_SRAM宏,中斷向量搬移到SRAM
    C/C++页设定

  6. debug頁面,不要選擇Load
    Application at Startup
    。在Initialization File新增檔案,檔名隨意。檔案內容參考下面 下麪的內容

FUNC void Setup (void) {
  SP = _RDWORD(0x20000000);                      //設定堆疊指針
  PC = _RDWORD(0x20000004);                      //設定PC指針
  _WDWORD(0xE000ED08, 0x20000000);               //設定中斷向量表地址
}

 //工程設定選項請不要勾選"Load Application ar Startup"
LOAD Objects\led.axf INCREMENTAL      //裝載程式碼到CPU內部RAM(Objects\led.axf 自己工程的路徑和檔名)
Setup();                                         //再呼叫Setup函數修改堆疊指針和PC指針 因爲SP的值要從目的碼中讀取
g, main                                          //執行到main函數

檔案裏面的Objects\led.axf需要更換成你的編譯輸出目錄和檔名,參考第4步

  1. Utilities頁面,不要選擇Update Target before Debugging

大家使用時遇到的問題,郵件討論[email protected].