新聞中心

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

STM32存儲器知識的相關應用“>STM32存儲器 — STM32存儲器知識的相關應用

作者: 時間:2016-11-28 來源:網絡 收藏
在我的另一篇筆記《stm32的存儲器》中講述了STM32的存儲器結構,及個人理解。

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

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

1 STM32的啟動

根據參考手冊RM0008中的圖表:

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

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

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

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

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

所以,通過設置BOOT0和BOOT1引腳,可以選擇相應的啟動模式。

2 STM32的ICP

In Circuit Programming,在電路編程。

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

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

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

3 STM32的ISP

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

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

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

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

當然,燒寫軟件(燒寫流程)的設計需要按照其固定好的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了。

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

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

如圖是跟Bit Banding有關系的存儲器結構:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


上一頁 1 2 下一頁

關鍵詞: STM32存儲

評論


技術專區(qū)

關閉