STM32CUBEIDE中修改FLASH起始地址的方法
若在MCU芯片中需要將程序分成兩個部分(如同時包含DFU下載程序與正常的應用程序),則需要將其中一者的程序地址偏移至另一者之后。如,在STM32F103C8T6中,在最低優化等級下,使用USB-DFU約需要32KB的FLASH(從0x08000000-0x08007FFF),則用戶的應用程序應當從0x08008000-0x08010000,故將程序偏移量應當設置成0x8000,程序起始地址變為0x08008000。
keil的程序偏移地址如文章KEIL中設置程序偏移方法所述。
在STM32CUBEIDE中,程序偏移地址設置方法如下:
1.設置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 */
設置程序的起始FLASH地址。(注意,要與USB-DFU程序中設置的程序燒錄起始地址一致,否則可能會造成指針跳轉錯誤)正常執行用戶應用程序時只需要將MCU執行的函數指針指向0x08008000即可。
2. 開啟中斷向量表偏移,設置為跟FLASH偏移一致。若不修改,會無法正常執行中斷。相關代碼在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文件,檢查程序地址如圖所示。可見地址已經修改成功。而后就可以利用STM官方提供的dfu file manager將其轉為dfu格式文件,并通過usb-dfu下載。即可正常執行程序。
總結
以上是生活随笔為你收集整理的STM32CUBEIDE中修改FLASH起始地址的方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一般什么企业需要开展等保三级测评工作
- 下一篇: PostgreSQL修炼之道之Postg