找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3578|回復(fù): 0
收起左側(cè)

STM32從內(nèi)部RAM啟動(dòng)編譯設(shè)置

[復(fù)制鏈接]
ID:716413 發(fā)表于 2020-5-19 19:42 | 顯示全部樓層 |閱讀模式
搞了幾天,終于從內(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í)際的大小。
1.png

2.配置向量表
同上,打開目標(biāo)配置:Project -> Options for Target -> C/C++,使用宏定義VECT_TAB_SRAM。如下圖:
2.png

這里的宏定義是為了讓向量表指向RAM(我們默認(rèn)是指向ROM),重要的一個(gè)目的就是讓中斷向量表指向RAM,上面“代碼功能”中斷的意義就是為了驗(yàn)證向量表的正確性。

注意:這里的宏定義是在工具鏈中配置的,多個(gè)宏定義之間需要有“逗號”隔離開來。

其實(shí)這里的宏定義配置也可以在源代碼中實(shí)現(xiàn),打開system_stm32f10x.c文件下第127行的“VECT_TAB_SRAM”宏定義,如下圖:
3.png
3.調(diào)試配置
同上:Project -> Options for Target -> Debug, 這里是關(guān)于調(diào)試的配置。
第一步:去掉“Load Application at Startup”前面的勾選項(xiàng)
導(dǎo)入RAM初始化文件。
4.png
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”
5.png


第四步:
在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)

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評分

回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表