新聞中心

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

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

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

本文引用地址:http://butianyuan.cn/article/201611/322623.htm

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

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

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

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

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

5 STM32的IAP

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

5.1什么是IAP

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

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

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

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

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

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

對(duì)于STM32來(lái)說(shuō),因?yàn)樗闹袛嘞蛄勘砦挥诔绦虼鎯?chǔ)器的最低地址區(qū),為了使第一部分代碼能夠正確地響應(yīng)中斷,通常會(huì)安排第一部分代碼處于Flash的開(kāi)始區(qū)域,而第二部分代碼緊隨其后。

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

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

如圖為IAP示意圖:

5.2設(shè)計(jì)自己獨(dú)特的IAP

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

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

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

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

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

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

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

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

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

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

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

如圖所示:

5.3 IAP例程

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

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

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

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

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

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



上一頁(yè) 1 2 下一頁(yè)

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

評(píng)論


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

關(guān)閉