新聞中心

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

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

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

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

        本文引用地址:http://www.104case.com/article/201611/322623.htm

        1 STM32的啟動

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

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

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

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

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

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

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

        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進行用戶程序的燒寫、更新;

        當然,燒寫軟件(燒寫流程)的設(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位)起個別名,分別對應別名區(qū)的一個字(word)。也就是別名區(qū)的大小是Bit Band區(qū)的32倍。這樣,對32MB的別名區(qū)地址的操作,就是對相應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還有兩個對應的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 下一頁

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

        評論


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

        關(guān)閉
        主站蜘蛛池模板: 沙河市| 马公市| 新郑市| 平泉县| 新蔡县| 长葛市| 资阳市| 泰兴市| 唐河县| 镇坪县| 繁昌县| 紫阳县| 科技| 怀来县| 钟山县| 柯坪县| 无锡市| 克东县| 九江县| 南通市| 上饶县| 双辽市| 孙吴县| 涞水县| 班玛县| 巴楚县| 原阳县| 建湖县| 广河县| 名山县| 哈尔滨市| 勃利县| 横山县| 会昌县| 昌平区| 青岛市| 元阳县| 和林格尔县| 高密市| 德阳市| 肃宁县|