新聞中心

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ò) 收藏
在我的另一篇筆記《stm32的存儲器》中講述了STM32的存儲器結(jié)構(gòu),及個人理解。

本篇文章將重點描述在對存儲器有了比較深入了解之后的一些相關(guān)的操作案例;重點在于STM32啟動設(shè)置和IAP使用,以及bit banding的理解,加上一個簡單的IAP程序設(shè)計。

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

1 STM32的啟動

根據(jù)參考手冊RM0008中的圖表:

得知STM32的啟動有三種模式,三種模式的選擇在于芯片上的兩個Boot引腳,如RM0008種描述:

在系統(tǒng)復(fù)位之后的四個上升沿后索存BOOT引腳,從而決定啟動方式;用戶對BOOT引腳的設(shè)置決定了系統(tǒng)復(fù)位之后的啟動模式。

三個不同的啟動區(qū)域有著不同的起始地址,STM32這樣規(guī)定:

注意的是:只有當(dāng)從SRAM啟動,只有一個單一的地址0x2000 0000可以訪問;而其他兩種啟動方式除了從各自的地址訪問,還可以從0x0000 0000地址訪問。

不同的啟動方式,決定了程序在設(shè)計過程中的方法,因此必須確認好程序存放空間和系統(tǒng)啟動模式。

所以,通過設(shè)置BOOT0和BOOT1引腳,可以選擇相應(yīng)的啟動模式。

2 STM32的ICP

In Circuit Programming,在電路編程。

ICP能夠通過JTAG、SWD或Boot Loader去下載用戶程序,以達到更新整個Flash的目的;

ICP提供一個快速的、有效的設(shè)計迭代,并消除不必要的包裝處理或設(shè)備套接。

這里對ICP不做過多的論述。

3 STM32的ISP

In System Programming,在系統(tǒng)編程。

STM32在出廠時,已經(jīng)固化了一段程序在System memory(medium-density devices的地址為:0x1FFF F000,大小為2KB)存儲器中。

這段程序就是一個固定好的,并且沒法修改的Boot Loader,如編程手冊PM0042種描述的:

這個固定好的,出廠就有的Boot Loader可以通過USART1進行用戶程序的燒寫、更新;

當(dāng)然,燒寫軟件(燒寫流程)的設(shè)計需要按照其固定好的Boot Loader的燒寫協(xié)議來進行。

因此在特殊的要求燒寫方式的場合,使用ISP是不太方便的,可以采用更為方便的IAP編程方法,以下會詳細介紹。

4 STM32的Bit Banding

Bit Banding功能是相對于以往能夠進行bit操作的單片機而言的。

通過Bit Banding功能可以像51單片機的bit操作一樣。MCS51可以簡單的將P1口的第2位獨立操作:P1.2=0;P1.2=1;就是這樣把P1口的第三個腳(BIT2)置0或置1了。

而現(xiàn)在STM32的位段、位帶別名區(qū)就為了實現(xiàn)這樣的功能。只不過他是為需要操作的地址(1字節(jié))的每一個位(共8位)起個別名,分別對應(yīng)別名區(qū)的一個字(word)。也就是別名區(qū)的大小是Bit Band區(qū)的32倍。這樣,對32MB的別名區(qū)地址的操作,就是對相應(yīng)Bit Band區(qū)的位的操作。

注意:別名字的位[31:1]在bit-band位上不起作用。寫入0x01與寫入0xFF的效果相同。寫入0x00與寫入0x0E的效果相同。

如圖是跟Bit Banding有關(guān)系的存儲器結(jié)構(gòu):

STM32有兩個Bit Band區(qū)域,分別是:

0x2000 0000——0x2010 0000:該地址是STM32的SRAM低1MB的地址區(qū)域;

0x4000 0000——0x4010 0000:該地址是STM32的Peripherals低1MB的地址區(qū)域;

另外,STM32還有兩個對應(yīng)的Bit Band區(qū)域的別名區(qū),分別是:

0x2200 0000——0x23FF FFFF:共32MB的空間,對應(yīng)相應(yīng)1MB的每一個位;

0x4200 0000——0x43FF FFFF:共32MB的空間,對應(yīng)相應(yīng)1MB的每一個位;

接下來的問題是如何確定Bit Band區(qū)字節(jié)的位所對應(yīng)的那個別名區(qū)的字(word)。Bit Band區(qū)和別名區(qū)是一一對應(yīng)的,具體的公式為:

bit_word_addr=bit_band_base+ (byte_offset×32) + (bit_number×4);

bit_band_base:32MB別名區(qū)首地址;

byte_offset:1MB位段區(qū)偏移量,即為bit-band區(qū)中包含目標(biāo)位的字節(jié)的編號;

bit_number:位段中目標(biāo)位的位位置(0-7);

注意:別名字的位[31:1]在bit-band位上不起作用。寫入0x01與寫入0xFF的效果相同。寫入0x00與寫入0x0E的效果相同。

舉個例子(通過別名區(qū)訪問地址):

1、想操作SRAM中Bit Band區(qū)地址為0x2000 0018字節(jié)的第2位

計算別名區(qū)對應(yīng)子地址:0x2200 0000 +(18*32)+(2*4) =0x2200 0248

所以,對0x2200 0248地址的操作,就是對0x2000 0018字節(jié)的第2位進行操作;


上一頁 1 2 下一頁

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

評論


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

關(guān)閉