ulink-Jlink下在ram和flash中調(diào)試STM32的方法
Keil MDK3.20 在ULINK下調(diào)試stm32方法
1. 程序在RAM中運行
要點:(1)程序的下載地址改到RAM空間中
(2)程序的debug之前要設(shè)定SP,PC指針到Ram空間
新建工程,選擇STM32 的具體型號,我買的萬利的開發(fā)板,選擇stm32f103Vb。
?
設(shè)定程序下載地址,如下圖所示,IROM1的地址指向了STM32的ram空間。
?
空間大小如何分配取決于自己的需求。本款處理器內(nèi)部ram大小為20K,分配16K給只讀區(qū),4K給可讀可寫區(qū)。這樣IROM設(shè)定的大小為0x4000,IRAM1的起始就變?yōu)?X20004000,大小只剩下0X1000。
Debug標(biāo)簽選擇ULINK1 Cortex Debugger(軟件采用yjgyiysbcc兄crack方法)。不選Load Application at Start,在Initialization中加入啟動腳本RAM.ini。
?
RAM.ini中具體內(nèi)容如下:
FUNC void Setup (void) {
SP = _RDWORD(0x20000000); // Setup Stack Pointer
PC = _RDWORD(0x20000004); // Setup Program Counter
_WDWORD(0xE000ED08, 0x20000000); // Setup Vector Table Offset Register
}
LOAD XXX.axf INCREMENTAL // Download,紅色代表工程文件名.axf
Setup(); // Setup for Running
g, main
Utilities下Update Target before Debugging不選
這樣添加后就可以在RAM中調(diào)試了。
>>>>>>我們需要在代碼中設(shè)置正確的中斷向量表位置。中斷向量表通常被放置在用戶程序的開始,所以flash中運行時,向量表位于0x08000000處,而當(dāng)代碼被放置在SRAM中運行時,他的位置就成了0x20000000。在初始化NVIC時,我們可以放置如下代碼,定義向量表的位置
NVIC_SetVectorTable(0x20000000 , 0x0);
或
NVIC_SetVectorTable(0x08000000 , 0x0);
或
?
>>>>>工程選項中Debug項,Download選項卡中,去掉所有鉤子,不下載代碼到flash,這樣就可以在RAM中調(diào)試程序了!
2. Flash中調(diào)試
新建工程后系統(tǒng)默認(rèn)設(shè)定好IROM1為FLASH的地址和空間大小。只需要兩步:
1) 設(shè)定調(diào)試工具為ULINK1 CORTEX DEBUGGER,如下圖所示,不需要設(shè)定起始腳本。
?
2) 在Utility中設(shè)定選擇ULINK1 cortex debugger,并設(shè)定編程算法。如下圖所示。
?
?
之后就可以FLASH調(diào)試了。
硬件:萬利的 EK-STM32F開發(fā)板,硬件去掉RS3,RS4 排阻,斷開開發(fā)板本身的仿真器。
軟件:KEIL MDK3.20+ULINK驅(qū)動替換文件。
仿真器:ULINK