在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.新增宏更改中斷向量表的地址
/* 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二種下載方式
4.修改檔案下載設定
這裡的地址需要和修改後的.sct檔案的地址對應起來,不然會下載失敗的
在debug介面需要勾選Verify Code Download
在.map檔案下可以看到,地址變了0x20000000地址偏移,而不是FLASH的0x08000000地址。
這樣就可以進行SARM的配置,直接透過JLINK下載即可。SARM下載會在斷電後丟失程式。
二、原理
STM32在系統上電在某個地址下取出棧指標地址和程式指標地址,而BOOT引腳的不同電平,會將地址對映到不同的地址去取值。
三種啟動方式的區別
影片連結:野火F407-在RAM中除錯程式碼