<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          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 來源:網(wǎng)絡(luò) 收藏
          在我的另一篇筆記《stm32的存儲(chǔ)器》中講述了STM32的存儲(chǔ)器結(jié)構(gòu),及個(gè)人理解。

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

          本文引用地址:http://www.ex-cimer.com/article/201611/322623.htm

          1 STM32的啟動(dòng)

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

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

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

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

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

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

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

          2 STM32的ICP

          In Circuit Programming,在電路編程。

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

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

          這里對(duì)ICP不做過多的論述。

          3 STM32的ISP

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

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

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

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

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

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

          4 STM32的Bit Banding

          Bit Banding功能是相對(duì)于以往能夠進(jìn)行bit操作的單片機(jī)而言的。

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

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

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

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

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

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

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

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

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

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

          接下來的問題是如何確定Bit Band區(qū)字節(jié)的位所對(duì)應(yīng)的那個(gè)別名區(qū)的字(word)。Bit Band區(qū)和別名區(qū)是一一對(duì)應(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é)的編號(hào);

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

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

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

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

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

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


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

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

          評(píng)論


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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();