STM32單片機(jī)實(shí)現(xiàn)Bootloader跳轉(zhuǎn)的關(guān)鍵步驟_第1頁(yè)
STM32單片機(jī)實(shí)現(xiàn)Bootloader跳轉(zhuǎn)的關(guān)鍵步驟_第2頁(yè)
STM32單片機(jī)實(shí)現(xiàn)Bootloader跳轉(zhuǎn)的關(guān)鍵步驟_第3頁(yè)
STM32單片機(jī)實(shí)現(xiàn)Bootloader跳轉(zhuǎn)的關(guān)鍵步驟_第4頁(yè)
STM32單片機(jī)實(shí)現(xiàn)Bootloader跳轉(zhuǎn)的關(guān)鍵步驟_第5頁(yè)
已閱讀5頁(yè),還剩3頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第第頁(yè)STM32單片機(jī)實(shí)現(xiàn)Bootloader跳轉(zhuǎn)的關(guān)鍵步驟本期(話題):

現(xiàn)在越來(lái)越多的(嵌入式)設(shè)備支持遠(yuǎn)程自動(dòng)升級(jí),不需要再借助(下載)器。這樣對(duì)于設(shè)備的維護(hù)非常方便。

當(dāng)然若使設(shè)備支持遠(yuǎn)程升級(jí),需要編寫支持升級(jí)的(程序代碼),可以稱之為BootLo(ad)er。

也就是說(shuō),將設(shè)備的程序代碼分為兩部分:BootLoader和APP。

BootLoader負(fù)責(zé)升級(jí)APP以及引導(dǎo)APP運(yùn)行。APP負(fù)責(zé)實(shí)現(xiàn)設(shè)備的業(yè)務(wù)處理功能,也就是設(shè)備的核心功能代碼。

對(duì)于Cortex-M系列的(單片機(jī))來(lái)說(shuō),若要實(shí)現(xiàn)BootLoader安全跳轉(zhuǎn)到APP,需要進(jìn)行一些配置。

本文就以(STM32)單片機(jī)為例,來(lái)聊一聊實(shí)現(xiàn)BootLoader跳轉(zhuǎn)的關(guān)鍵配置步驟。

聊一聊:

在程序開發(fā)設(shè)計(jì)階段,要根據(jù)具體應(yīng)用情況,對(duì)程序存儲(chǔ)的Flash進(jìn)行分區(qū)。

即,BootLoader存儲(chǔ)的位置以及需要分配的空間大小,以及APP的存儲(chǔ)的位置和大小。這個(gè)存儲(chǔ)位置直接關(guān)系到程序的執(zhí)行和跳轉(zhuǎn)。

最簡(jiǎn)單的一種升級(jí)方案是:一個(gè)BootLoader和一個(gè)APP,BootLoader實(shí)現(xiàn)跳轉(zhuǎn)和升級(jí)APP的功能。本文以這個(gè)升級(jí)方案為例進(jìn)行介紹。

對(duì)于STM32單片機(jī)來(lái)說(shuō),程序啟動(dòng)的映射地址為0x8000000。

可以將BootLoader存儲(chǔ)在0x8000000地址,分配的空間可以根據(jù)(芯片)具體的Flash大小進(jìn)行調(diào)整。比如0x10000,64K字節(jié)。

APP存儲(chǔ)的地址,安排在BootLoader后邊,即存儲(chǔ)地址為0x8010000,F(xiàn)lash剩余的空間都可以分配給APP。

BootLoader工程配置

BootLoader的工程需要進(jìn)行一些配置,以MDK為例,如下圖所示,BootLoader程序存放的FLASH地址為0x8000000,大小為0x10000。

在跳轉(zhuǎn)APP的程序代碼需要注意以下幾點(diǎn):

檢查棧頂?shù)刂肥欠窈戏?,也就是APP存放的起始地址是否合法,if(((*(__IOuint32_t*)APP_FLASH_ADDR)/*APPflashaddress*/#defineAPP_FLASH_ADDR

(0x8010000)voidjump_to_app(void){

uint32_tJumpAddress;

pFunctionJump_To_Appl(ic)ation;

/*檢查棧頂?shù)刂肥欠窈戏?/

if(((*(__IOuint32_t*)APP_FLASH_ADDR)

/*用戶代碼區(qū)第二個(gè)字為程序開始地址(復(fù)位地址)*/

JumpAddress=*(__IOuint32_t*)(APP_FLASH_ADDR+4);

/*Initializeuserapplication'sSt(ac)kPointer*/

/*初始化APP堆棧指針(用戶代碼區(qū)的第一個(gè)字用于存放棧頂?shù)刂?*/

__set_MSP(*(__IOuint32_t*)APP_FLASH_ADDR);

/*類型轉(zhuǎn)換*/

Jump_To_Application=(pFunction)JumpAddress;

/*跳轉(zhuǎn)到APP*/

Jump_To_Application();

}}

APP工程配置

APP的工程需要進(jìn)行一些配置,以MDK為例,如下圖所示,APP

程序存放的FLASH地址為0x8010000,大小為0x30000。

APP程序代碼需要進(jìn)行如下配置:

修改APP內(nèi)部Flash向量表重定位

SCB->VTOR

APP運(yùn)行后,初始化函數(shù)中,開啟中斷,否則程序會(huì)運(yùn)行異常

正常來(lái)說(shuō),在啟動(dòng)文件中執(zhí)行調(diào)用SystemInit()函數(shù),這個(gè)函數(shù)會(huì)配置Flash的(接口)信息。

SCB->VTOR=FLASH_BASE|VECT_TAB_OFFSET。

修改宏定義VECT_TAB_OFFSET的值為0x10000。

APP程序啟動(dòng)之后,需要先使能全局中斷,可將下邊的代碼放在初始化的地方:

/*使能中斷*/__enable_irq();

最后

設(shè)備運(yùn)行期間,APP在運(yùn)行處理業(yè)務(wù)功能。如果要升級(jí)APP,需要從APP切換到BootLoader中。那么,如何實(shí)現(xiàn)APP跳轉(zhuǎn)到BootLoader呢?有兩種方法:

(硬件)方式,設(shè)備斷電重啟或復(fù)位按鍵

軟件方式,通過(guò)軟件控制復(fù)位(MCU)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論