搞了幾天,終于從內(nèi)部RAM啟動(dòng)了,我借用了網(wǎng)上一篇文章,在此向原作者致敬。
原作的設(shè)置,不完全適用我的環(huán)境,我作了一些改動(dòng)。
本文基礎(chǔ)是原作者的,也加入了我的設(shè)置。
文中的圖片,沒能貼上來,我把本文一并壓縮,可以下載打開看個(gè)仔細(xì)。
STM32內(nèi)部RAM在線調(diào)試配置方法及詳細(xì)說明寫在前面 本文主要講述的內(nèi)容:基于Keil開發(fā)工具下,STM32內(nèi)部RAM在線調(diào)試配置方法,以及每一項(xiàng)配置的詳細(xì)說明。 讓程序運(yùn)行在RAM中調(diào)試代碼有兩優(yōu)點(diǎn):1.速度快;2.減少對芯片F(xiàn)LASH讀寫次數(shù),增加芯片壽命。 本文基于ST公司Cortex-M內(nèi)核的STM32來講述其配置方法,其實(shí)也適用于其他公司(如:TI、NXP等)的Cortex-M芯片,原理都是一樣的。 第二點(diǎn)在本文中的作用也很大,就是使用了中斷功能。由于RAM調(diào)試會(huì)牽涉到向量表,中斷功能就會(huì)使用到向量表,如果沒有配置正確,這里就不會(huì)響應(yīng)中斷,或者出錯(cuò)。 RAM調(diào)試配置方法 本節(jié)主要講述配置方法的過程,為什么這么配置,以及配置的原理將會(huì)在下一章節(jié)講述。 1.修改內(nèi)存地址 打開目標(biāo)配置:Project -> Options for Target -> Target或“工程目標(biāo)配置”點(diǎn)擊快捷按鈕。 將ROM和RAM地址映射到如下圖地址。 我們使用STM32F103ZE芯片,該芯片的RAM大小為0x10000即64KB,我們這里平分RAM,即各自的大小為0x5000。 注意:配置的地址范圍不能超過芯片實(shí)際的大小。
2.配置向量表 同上,打開目標(biāo)配置:Project -> Options for Target -> C/C++,使用宏定義VECT_TAB_SRAM。如下圖:
這里的宏定義是為了讓向量表指向RAM(我們默認(rèn)是指向ROM),重要的一個(gè)目的就是讓中斷向量表指向RAM,上面“代碼功能”中斷的意義就是為了驗(yàn)證向量表的正確性。
注意:這里的宏定義是在工具鏈中配置的,多個(gè)宏定義之間需要有“逗號”隔離開來。
其實(shí)這里的宏定義配置也可以在源代碼中實(shí)現(xiàn),打開system_stm32f10x.c文件下第127行的“VECT_TAB_SRAM”宏定義,如下圖:
3.調(diào)試配置 同上:Project -> Options for Target -> Debug, 這里是關(guān)于調(diào)試的配置。 第一步:去掉“Load Application at Startup”前面的勾選項(xiàng) 導(dǎo)入RAM初始化文件。
RAM初始化文件里面內(nèi)容如下: FUNC void Setup (void) { SP = _RDWORD(0x20000000); PC = _RDWORD(0x20000004); _WDWORD(0xE000ED08, 0x20000000); }
LOAD Objects\ExecutableFile.axf INCREMENTAL Setup(); g, main
每一條語句具體意思請見源代碼注釋,這里提示的是Objects\ExecutableFile.axf
也就是輸出路徑和輸出文件名,它的路徑與文件名與你工程配置需對應(yīng)。 第二步:調(diào)試不更新目標(biāo)程序 同上:Project -> Options for Target -> Utilities,不勾選“更新”。意思就是在線調(diào)試時(shí),不更新芯片(下載FLASH)程序。
第三步:改右邊上RAM for algonthm 改右邊下Start: (同修改內(nèi)存地址) 單選“Do not Erase”
第四步: 在LinKer 中,不勾Use Memory Layoutfrom Target Dialog(才能改) 改R/O Base= 0x2000 0000 R/W Base=0x20005000(同修改內(nèi)存地址) 勾上Use Memory Layout from Target Dialog(不再改了)
至此,STM32內(nèi)部RAM在線調(diào)試配置方法就完成了,連接開發(fā)板,重新編譯后,跳線設(shè)置BOOT0=1 ,BOOT1=0 ,就可以使用RAM在線調(diào)試代碼了 試驗(yàn)結(jié)果: 1、只能在調(diào)試環(huán)境中使用,非調(diào)試環(huán)境,無論BOOT如何設(shè)置,都不能運(yùn)行RAM。 2、不斷電,下次進(jìn)入本例程調(diào)試環(huán)境,依然可以運(yùn)行,不需要再寫入,說明程序在內(nèi)存中。 (原來寫在FLASH中的程序不使用20000000-20005000這一段,避免破壞本程序)
8. 蜂鳴器RAM.7z
(384.79 KB, 下載次數(shù): 7)
2020-5-19 19:59 上傳
點(diǎn)擊文件名下載附件
|