在內(nèi)存中調(diào)試STM32
STM32這顆Cortex-M3控制器,與其他許多ARM一樣,提供了BOOT0和BOOT1兩個管腳用于啟動選擇。
BOOT1=x BOOT0=0 從用戶閃存啟動,這是正常的工作模式。
BOOT1=0 BOOT0=1 從系統(tǒng)存儲器啟動,這種模式啟動的程序功能由廠家設(shè)置。(用于串口ISP)
BOOT1=1 BOOT0=1 從內(nèi)置SRAM啟動,這種模式可以用于調(diào)試。
在芯片上電復(fù)位時,BOOT0和BOOT1兩個管腳的狀態(tài)將決定芯片從何處啟動。
1.當(dāng)BOOT0和BOOT1均設(shè)置為邏輯1時,系統(tǒng)將從內(nèi)置SRAM中啟動,這是代碼內(nèi)存調(diào)試的第一個條件。
2. 然后,我們需要在代碼中設(shè)置正確的中斷向量表位置。中斷向量表通常被放置在用戶程序的開始,所以flash中運行時,向量表位于0x08000000處,而當(dāng)代碼被放置在SRAM中運行時,他的位置就成了0x20000000。在初始化NVIC時,我們可以放置如下代碼,定義向量表的位置
NVIC_SetVectorTable(0x20000000 , 0x0);
或
NVIC_SetVectorTable(0x08000000 , 0x0);
3. 在編譯器中,要進(jìn)行正確的設(shè)置。這里以IAR 5.4為例說明。
3.1. 工程選項中Linker項,Config選項卡中,指定Linker Configuration File為stm32f10x_ram.icf, 該文件在FWLIB安裝包中可以獲得,IAR4和5分別有不同的配置文件。
3.2. 同樣是工程選項中Debug項,Download選項卡中,去掉所有鉤子,不下載代碼到flash
經(jīng)過以上步驟,代碼就可以在內(nèi)存中調(diào)試,下載速度飛快,調(diào)試速度也比flash中快了不少!