版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2026學(xué)年揭陽(yáng)市揭東縣數(shù)學(xué)三年級(jí)上學(xué)期期中達(dá)標(biāo)測(cè)試試題(含解析)
- 古詩(shī)詞誦讀《李憑箜篌引》課件
- 2026年長(zhǎng)白山職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)傾向性考試題庫(kù)附答案
- 2026年阿勒泰職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)傾向性測(cè)試模擬測(cè)試卷附答案
- 2026年黑龍江農(nóng)業(yè)職業(yè)技術(shù)學(xué)院?jiǎn)握新殰y(cè)考試題庫(kù)附答案
- 2026年齊齊哈爾高等師范??茖W(xué)校單招職業(yè)適應(yīng)性考試模擬測(cè)試卷及答案1套
- 腰椎醫(yī)療科普
- 2026年Q1內(nèi)容營(yíng)銷數(shù)據(jù)分析模板:可視化報(bào)告一鍵生成
- 兒童股骨骨折的石膏固定與護(hù)理
- 傳染病發(fā)熱患者護(hù)理技巧分享
- 交通事故培訓(xùn)
- 2026年醫(yī)保藥品目錄調(diào)整
- 基本藥物培訓(xùn)課件資料
- 汪金敏 培訓(xùn)課件
- 物流公司托板管理制度
- 醫(yī)療護(hù)理操作評(píng)分細(xì)則
- 自考-經(jīng)濟(jì)思想史知識(shí)點(diǎn)大全
- 銀行資金閉環(huán)管理制度
- 2024年山東省胸痛中心質(zhì)控報(bào)告
- dlt-5161-2018電氣裝置安裝工程質(zhì)量檢驗(yàn)及評(píng)定規(guī)程
- 學(xué)習(xí)無(wú)人機(jī)航拍心得體會(huì)1000字
評(píng)論
0/150
提交評(píng)論