日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

STM32CUBEIDE中修改FLASH起始地址的方法

發(fā)布時間:2023/12/20 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 STM32CUBEIDE中修改FLASH起始地址的方法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

若在MCU芯片中需要將程序分成兩個部分(如同時包含DFU下載程序與正常的應(yīng)用程序),則需要將其中一者的程序地址偏移至另一者之后。如,在STM32F103C8T6中,在最低優(yōu)化等級下,使用USB-DFU約需要32KB的FLASH(從0x08000000-0x08007FFF),則用戶的應(yīng)用程序應(yīng)當(dāng)從0x08008000-0x08010000,故將程序偏移量應(yīng)當(dāng)設(shè)置成0x8000,程序起始地址變?yōu)?strong>0x08008000。
keil的程序偏移地址如文章KEIL中設(shè)置程序偏移方法所述。
在STM32CUBEIDE中,程序偏移地址設(shè)置方法如下:

1.設(shè)置STM32F103C8TX_FLASH.ld文件,將40行代碼:

FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 64K

與stm32f103xb.h文件中573行的代碼:

#define FLASH_BASE 0x08000000UL /*!< FLASH base address in the alias region */

修改為(修改起始地址ORIGIN與可用FLASH長度LENGTH):

FLASH (rx) : ORIGIN = 0x8008000, LENGTH = 32K

#define FLASH_BASE 0x08008000UL /*!< FLASH base address in the alias region */


設(shè)置程序的起始FLASH地址。(注意,要與USB-DFU程序中設(shè)置的程序燒錄起始地址一致,否則可能會造成指針跳轉(zhuǎn)錯誤)正常執(zhí)行用戶應(yīng)用程序時只需要將MCU執(zhí)行的函數(shù)指針指向0x08008000即可。

2. 開啟中斷向量表偏移,設(shè)置為跟FLASH偏移一致。若不修改,會無法正常執(zhí)行中斷。相關(guān)代碼在system_stm32f1xx.c中,將97行至114行:

// #define USER_VECT_TAB_ADDRESS#if defined(USER_VECT_TAB_ADDRESS) /*!< Uncomment the following line if you need to relocate your vector Tablein Sram else user remap will be done in Flash. */ /* #define VECT_TAB_SRAM */ #if defined(VECT_TAB_SRAM) #define VECT_TAB_BASE_ADDRESS SRAM_BASE /*!< Vector Table base address field.This value must be a multiple of 0x200. */ #define VECT_TAB_OFFSET 0x00000000U /*!< Vector Table base offset field.This value must be a multiple of 0x200. */ #else #define VECT_TAB_BASE_ADDRESS FLASH_BASE /*!< Vector Table base address field.This value must be a multiple of 0x200. */ #define VECT_TAB_OFFSET 0x00000000U /*!< Vector Table base offset field.This value must be a multiple of 0x200. */ #endif /* VECT_TAB_SRAM */ #endif /* USER_VECT_TAB_ADDRESS */

將注釋消除,并將中斷向量表偏移修改為與FLASH一致:

#define USER_VECT_TAB_ADDRESS#if defined(USER_VECT_TAB_ADDRESS) /*!< Uncomment the following line if you need to relocate your vector Tablein Sram else user remap will be done in Flash. */ /* #define VECT_TAB_SRAM */ #if defined(VECT_TAB_SRAM) #define VECT_TAB_BASE_ADDRESS SRAM_BASE /*!< Vector Table base address field.This value must be a multiple of 0x200. */ #define VECT_TAB_OFFSET 0x00000000U /*!< Vector Table base offset field.This value must be a multiple of 0x200. */ #else #define VECT_TAB_BASE_ADDRESS FLASH_BASE /*!< Vector Table base address field.This value must be a multiple of 0x200. */ #define VECT_TAB_OFFSET 0x00000000U /*!< Vector Table base offset field.This value must be a multiple of 0x200. */ #endif /* VECT_TAB_SRAM */ #endif /* USER_VECT_TAB_ADDRESS */

3. 利用Notepad打開生成的HEX文件,檢查程序地址如圖所示??梢姷刂芬呀?jīng)修改成功。而后就可以利用STM官方提供的dfu file manager將其轉(zhuǎn)為dfu格式文件,并通過usb-dfu下載。即可正常執(zhí)行程序。

總結(jié)

以上是生活随笔為你收集整理的STM32CUBEIDE中修改FLASH起始地址的方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。