新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > STM32存儲器知識的相關(guān)應(yīng)用“>STM32存儲器 — STM32存儲器知識的相關(guān)應(yīng)用

STM32存儲器知識的相關(guān)應(yīng)用“>STM32存儲器 — STM32存儲器知識的相關(guān)應(yīng)用

作者: 時間:2016-11-28 來源:網(wǎng)絡(luò) 收藏

本文引用地址:http://2s4d.com/article/201611/322623.htm

2、想操作Peripherals中Bit Band區(qū)地址為0x4000 0021字節(jié)的第7位

(可能是一個功能寄存器);

計算別名區(qū)對應(yīng)子地址:0x4200 0000+(21*32)+(7*4)=0x4200 02BC

所以,對0x4200 02BC的操作,就是對0x4000 0021字節(jié)的第7位進(jìn)行操作;

對比使用Bit Banding功能和直接訪問Bit Band區(qū)域,如圖:

5 STM32的IAP

In Application Programming,在應(yīng)用編程。

5.1什么是IAP

IAP是In Application Programming的首字母縮寫,IAP是用戶自己的程序在運行過程中對User Flash的部分區(qū)域進(jìn)行燒寫,目的是為了在產(chǎn)品發(fā)布后可以方便地通過預(yù)留的通信口對產(chǎn)品中的固件程序進(jìn)行更新升級。通常在用戶需要實現(xiàn)IAP功能時,即用戶程序運行中作自身的更新操作,需要在設(shè)計固件程序時編寫兩個項目代碼,第一個項目程序不執(zhí)行正常的功能操作,而只是通過某種通信管道(如USB、USART)接收程序或數(shù)據(jù),執(zhí)行對第二部分代碼的更新;第二個項目代碼才是真正的功能代碼。這兩部分項目代碼都同時燒錄在User Flash中,當(dāng)芯片上電后,首先是第一個項目代碼開始運行,它作如下操作:

1)檢查是否需要對第二部分代碼進(jìn)行更新

2)如果不需要更新則轉(zhuǎn)到4)

3)執(zhí)行更新操作

4)跳轉(zhuǎn)到第二部分代碼執(zhí)行

第一部分代碼必須通過其它手段,如JTAG或ISP燒入;第二部分代碼可以使用第一部分代碼IAP功能燒入,也可以和第一部分代碼一道燒入,以后需要程序更新是再通過第一部分IAP代碼更新。

對于STM32來說,因為它的中斷向量表位于程序存儲器的最低地址區(qū),為了使第一部分代碼能夠正確地響應(yīng)中斷,通常會安排第一部分代碼處于Flash的開始區(qū)域,而第二部分代碼緊隨其后。

在第二部分代碼開始執(zhí)行時,首先需要把CPU的中斷向量表映像到自己的向量表,然后再執(zhí)行其他的操作。

如果IAP程序被破壞,產(chǎn)品必須通過JTAG或ISP重新燒寫程序,這是很麻煩并且非常耗費時間和金錢的。針對這樣的需求,STM32在對Flash區(qū)域?qū)嵭凶x保護的同時,自動地對用戶Flash區(qū)的開始4頁設(shè)置為寫保護,這樣可以有效地保證IAP程序(第一部分代碼)區(qū)域不會被意外地破壞。

如圖為IAP示意圖:

5.2設(shè)計自己獨特的IAP

IAP程序可以自己設(shè)計,這樣能夠符合自身對在先下載的特殊需求。針對這一要求,本文進(jìn)行了一個IAP程序的結(jié)構(gòu)設(shè)計,并已經(jīng)通過測試。

帶IAP的系統(tǒng)由兩個工程需要編寫,一個是IAP工程,一個User App工程。

設(shè)計將IAP程序放在0x0800 0000——0x0800 2000這段空間中,User App放在0x0800 2000之后的余下空間;

下面描述如何友好的處理著兩個工程之間程序運行的關(guān)系,達(dá)到IAP這個功能:

1)設(shè)置系統(tǒng)為Boot from main flash memory啟動模式;

2)系統(tǒng)上電之后PC指向0x0800 0000處,進(jìn)而運行到IAP工程的main()入口處;

3)在IAP中:檢測標(biāo)志,如果UserApp_Flag為OK,則直接跳轉(zhuǎn)到5)User App;

4)在IAP中:檢測標(biāo)志,如果UserApp_Flag不為OK,則繼續(xù)IAP歷程,等到更新好User App后,設(shè)置UserApp_Flag為OK,然后跳轉(zhuǎn)到5)User App;

5)跳轉(zhuǎn)到User App,運行系統(tǒng)功能;

6)在User App中,如果檢測到現(xiàn)在需要更新User App,先設(shè)置UserApp_Flag為!OK,然后跳轉(zhuǎn)到3)IAP中;

以上6個步驟能夠保證IAP和User App之間的良好關(guān)系,實現(xiàn)STM32的IAP功能。

如圖所示:

5.3 IAP例程

IAP程序設(shè)計思路:

1)IAP程序設(shè)計放置在Flash的起始地址,當(dāng)用戶選擇從Main Flash memory啟動時,系統(tǒng)進(jìn)入了0x0800 0000地址,也就是進(jìn)入了IAP程序;

2)在IAP中,判斷UserApp程序是否有效(通過對標(biāo)志地址內(nèi)容的判斷),若有效則直接跳轉(zhuǎn)到UserApp程序地址0x08002000,也就是進(jìn)入了UserApp程序(跳轉(zhuǎn)到4));若UserApp程序標(biāo)志無效,則更新UserApp。

3)在IAP中,需要更新的UserApp程序數(shù)據(jù)來自于USART,將從USART接收到的數(shù)據(jù)寫入到UserApp程序地址中去,達(dá)到更新UserApp程序的目的;當(dāng)UserApp程序完成更新之后,設(shè)置UserApp程序有效標(biāo)志,然后跳轉(zhuǎn)到UserApp程序地址0x08002000;

4)在UserApp程序中,可以實現(xiàn)系統(tǒng)功能;當(dāng)有需要IAP信號產(chǎn)生之后,首先設(shè)置UserApp程序為無效,然后跳轉(zhuǎn)到IAP程序首地址0x0800 0000,程序又進(jìn)入IAP(跳轉(zhuǎn)到2));

至此,關(guān)于《器知識的相關(guān)應(yīng)用(IAP、Bit Banding)》知識已經(jīng)結(jié)束.



上一頁 1 2 下一頁

關(guān)鍵詞: STM32存儲

評論


技術(shù)專區(qū)

關(guān)閉