F407在RAM中除錯

嵌小黑發表於2024-07-01

在RAM中除錯程式碼

一.軟硬體操作

硬體方面需要先修改BOOT0和BOOT1的引腳的高低電平。SRAM執行模式BOOT0和BOOT1都是高電平。

軟體方面:

1.需要先取消勾選Use Memory Layout from Target Dialog,點選下方的Edit編輯.sct


2.修改.sct分散載入檔案
原始檔案

LR_IROM1 0x08000000 0x00080000  {    ; load region size_region
  ER_IROM1 0x08000000 0x00080000  {  ; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
   .ANY (+XO)
  }
  RW_IRAM1 0x20000000 0x00020000  {  ; RW data
   .ANY (+RW +ZI)
  }
}

修改後的檔案

LR_IROM1 0x20000000 0x00010000  {    ; load region size_region
  ER_IROM1 0x20000000 0x00010000  {  ; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
   .ANY (+XO)
  }
  RW_IRAM1 0x20010000 0x00010000  {  ; RW data
   .ANY (+RW +ZI)
  }
}

3.新增宏更改中斷向量表的地址

pkckYoq.png

  /* Configure the Vector Table location add offset address ------------------*/
#ifdef VECT_TAB_SRAM
  SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */
#else
  SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */
#endif

不直接在檔案中新增宏定義是因為工程保留了SRAM和FLASH二種下載方式

pkckUYV.png

4.修改檔案下載設定

pkckaWT.png

這裡的地址需要和修改後的.sct檔案的地址對應起來,不然會下載失敗的

pkckwSU.png

在debug介面需要勾選Verify Code Download

pkck0lF.png

在.map檔案下可以看到,地址變了0x20000000地址偏移,而不是FLASH的0x08000000地址。

這樣就可以進行SARM的配置,直接透過JLINK下載即可。SARM下載會在斷電後丟失程式。

二、原理

STM32在系統上電在某個地址下取出棧指標地址和程式指標地址,而BOOT引腳的不同電平,會將地址對映到不同的地址去取值。

6fmuh4k2TbWYeQt.png

三種啟動方式的區別

image.png

影片連結:野火F407-在RAM中除錯程式碼

相關文章