有時候,我們不想讓程序存儲在起始的位置,比如現在有一段bootloader,對應的app(應用程序)存儲的位置就會有一個偏移地址。那么,如何讓程序存儲在指定的偏移地址呢?
本文將結合STM32,給大家講一講在Keil和IAR開發環境中設置起始地址0x08010000的方法。
Keil配置方法
首先,打開工程目標選項:Project -> Options for Target -> Target。
修改目標ROM起始地址,如下圖所示:

說明:
1、勾選的IROM即對應的存儲區域;
2、起始地址(Start)和大小(Size)根據你實際情況進行配置。
IAR配置方法
類似方法,進入配置界面: 1、進入配置界面:Pooject -> Options -> Linker -> Config; 2、勾選上“Override default”; 3、點擊“Edit”,修改ROM起始地址為; 4、點擊“Save”保存(第一次修改后,xxx.icf文件名和路徑都選擇默認)。
具體如下圖所示:

驗證代碼存儲地址
對于STM32芯片來說,可以直接使用STM32 ST-LINK Utility(或者STM32CubeProg)工具讀取FLASH數據驗證代碼是否存儲在相應地址位置。
至于其他廠家芯片,可以使用對應可以讀取FLASH數據的工具來驗證。
如下圖所示:

從上圖可以看到,代碼是從0x08010000起始存儲的。通過查看前面的存儲區域可以發現,數據全是0xFFFF。也就是說,沒有被代碼占用這些扇區。
關鍵字:STM32 Keil 偏移地址 程序存儲
引用地址:
基于STM32的Keil和偏移地址程序存儲
推薦閱讀最新更新時間:2025-05-20 20:51
STM32 Keil下編程實現LED燈點亮與閃爍
前言 基于STM32F10C8T6在Keil下編程實現LED燈點亮與閃爍 一、原理圖 1.STM32F103C8T6 STM32F103C8T6是ST在2007年發布的一款MCU,截止目前ST已經發布了速度高達400MHz的STM32H7。三點好處,一是封裝比較大,方便初學者焊接,二是價格低廉,學習成本比較低,三是網上有大量的資料供初學者學習使用。 2.LED2 LED2控制一個綠色通訊指示燈,管腳為PB3。 3.LED3 LED3控制8個小燈點亮,管腳為PC13。 二、Keil代碼 1.Led.h 代碼如下: #ifndef _LED_H_ #define _LED_H_ #include stm32f10x
[單片機]
STM32開發筆記68: keil中使用ST-Link不能成功下載的真實原因
單片機型號:STM32F091RCT6 在STM32開發筆記67: 在keil中使用ST-Link不能成功下載的解決方法提到解決keil中使用ST-Link不能成功下載的一種方法,經仔細分析其實原因還在于程序上。 不能成功下載的程序中,包含如下程序,: CInit::CInit(uint8_t mode) { //底層初始化 HAL_Init(); //GPIO時鐘使能 __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); __HAL_RCC_GPIOC_CLK_ENABLE(); __HAL_RCC_GPIOD_CLK_ENAB
[單片機]
STM32:如何用JLINK ULINK JTAG 查看 KEIL /MDK 某條指令執行時間
方法一: 為了保證在MDK中讀取正確的程序運行時間,必須對仿真器的跟蹤項進行設置。 以ULink2為例: (1)在工程的“ Option for Target ..”目標選項界面中,選擇標簽“Debug”,進行調試設置界面,選擇使用“Cortex-M3-ULIK2”作為仿真器,然后點擊右側的“Settings”按鍵,進入ULINK設置界面。 (2)點擊標簽“Trace”進入跟蹤設置界面,將“Core Clock:”右側的編輯區輸入你的CPU的頻率,例如你的實際CPU運行頻率為72MHz。 (3)“Core Clock”的值決定MDK以什么頻率來計算指令周期,因為“Core Clock”的默認值為10MHz,
[單片機]
keil應用的中的問題
keil中常見的幾種警告,固然,相對于錯誤的,警告的程度不及錯誤的嚴重性,有時候忽略,會出現意想不到的錯誤。先看看常見的幾種錯誤,分析出來現的原因。 1. Warning 280:’i’:unreferenced local variable 說明 局部變量 i 在函數中未作任何的存取操作 解決方法 消除函數中 i變量的宣告 2 Warning 206:’Music3’:missing function-prototype 說明 Music3( )函數未作宣告 或未作外部宣告 所以無法給其他函數調用 解決方法 將敘述void Music3(void)寫在程序的最前端作宣告 如果是其他文件的函數則要寫成 extern vo
[單片機]
基于Keil MDK-ARM 和 IAR EWARM進行仿真打印的配置
1寫在前面 很多初學者習慣使用軟件仿真,應該是很多人都知道的一款仿真軟件。 以前開發板相對較貴,且快遞不方便,使用仿真軟件可以理解。現在便宜的STM32開發板就十幾塊,還用仿真軟件,我不是很理解。 有經驗的人都知道,仿真和實際運行情況很多時候都不一樣,相信不用我說,大家都明白。 因此,我個人不是很推薦大家仿真,本文內容可能存在紕漏,僅限個人學習。 下面講述基于Keil MDK-ARM 和 IAR EWARM進行仿真打印的配置。 2Keil仿真打印配置 Keil MDK-ARM不能仿真,原因出在仿真參數出現了問題: 修改這兩處參數為:DARMSTM.DLL -pSTM32F103ZE 基于前面使用STM32CubeMX生成工
[單片機]
基于Keil C51 集成開發環境的仿真與調試
一. 實驗目的 熟悉Keil C51 集成開發環境調試功能的使用和DP-51PROC 單片機綜合仿真實驗儀的使用。 二. 實驗設備及器件 IBM PC 機 一臺 DP-51PROC 單片機綜合仿真實驗儀 一臺 三. 實驗內容 按照本書的第2 章的2.5 節內容進行Keil C51 集成開發環境的仿真調試練習。然后按照以下內容建立文件并編譯仿真調試。 ORG 8000H LJMP Main ORG 80F0H Main: MOV R7, #0 Loop: MOV R6, #0 DJNZ R6, $ DJNZ R6, $ DJNZ R6, $ DJNZ R6, $ DJNZ R7, Loop ;延時 CPL P1.0 ; P 1
[單片機]
從0開始學Keil下的S3C2440裸機開發-2使用外部SDRAM
和使用內部RAM一樣,關鍵設置分散加載文件,同時設置JLINK初始化配置文件。 1、新增工程配置組。 2設置分散加載組 3設置ini文件 Ext_Ram內容: FUNC void SetupForStart (void) { // o Program Entry Point PC = 0x30000000; } FUNC void Init (void) { _WDWORD(0x4A000008, 0xFFFFFFFF); // Disable All Interrupts _WDWORD(0x53000000, 0x00000000); // Disable Watchdog Timer
[單片機]