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

          新聞中心

          EEPW首頁(yè) > 模擬技術(shù) > 設(shè)計(jì)應(yīng)用 > STM32F1 0x在應(yīng)用中編程的實(shí)現(xiàn)方法

          STM32F1 0x在應(yīng)用中編程的實(shí)現(xiàn)方法

          作者: 時(shí)間:2009-10-15 來源:網(wǎng)絡(luò) 收藏
          引 言
          Cortex-M3是首款基于ARMv7-M體系結(jié)構(gòu)的位標(biāo)準(zhǔn)處理器,RISC結(jié)構(gòu),包含高效靈活的Thumb-2指令集,擁有杰出的低功耗特性,為微控制器系統(tǒng)、汽車車身控制系統(tǒng)、工業(yè)控制系統(tǒng)和無線網(wǎng)絡(luò)等嵌入式應(yīng)用量身設(shè)計(jì)。ST公司推出基于Cortex-M3內(nèi)核的系列處理器,憑借其出眾的性能、創(chuàng)新的外設(shè)、優(yōu)越的功耗控制,得到眾多工程師的青睞。
          針對(duì)嵌入式應(yīng)用的特點(diǎn),處理器提供功能強(qiáng)大的硬件調(diào)試接口――JTAG接口和串行接口,極大方便了設(shè)計(jì),縮短了產(chǎn)品的開發(fā)周期。不僅如此,32處理器內(nèi)嵌的閃存存儲(chǔ)器允許在電路編程(In-Circuit Pro-gramming,ICP)和在應(yīng)用中編程(In-Application Program-ming,IAP)。利用在應(yīng)用中編程,僅需通過一根串口線,就可以完成產(chǎn)品固件的更新。本文對(duì)STM32處理器的在應(yīng)用中編程進(jìn)行了詳細(xì)的分析,結(jié)合硬件和驅(qū)動(dòng)給出了IAP的具體實(shí)現(xiàn)方法,稍加修改,便可應(yīng)用于STM32處理器的所有系列產(chǎn)品。

          1 STM10x處理器
          1.1 STM32處理器特點(diǎn)

          STM32全系列處理器具有腳對(duì)腳、外設(shè)及軟件的高度兼容性。這給應(yīng)用帶來很好的靈活性,易于將應(yīng)用升級(jí)到不同存儲(chǔ)空間或不同封裝的平臺(tái)。STM32處理器的產(chǎn)品全系列兼容,使得項(xiàng)目之間的代碼重用和移植很方便。
          1.2 STM32處理器內(nèi)存映射
          Cortex-M3的存儲(chǔ)系統(tǒng)采用統(tǒng)一編址的方式,程序存儲(chǔ)器、數(shù)據(jù)存儲(chǔ)器、寄存器被組織在4 GB的線性地址空間內(nèi),以小端格式(little-endian)存放。內(nèi)存映射如圖1所示。

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

          在代碼區(qū),0x00000000地址為啟動(dòng)區(qū)。上電以后,CPU從這個(gè)地址開始執(zhí)行代碼0x08000000為用戶Flash的起始地址,0x1FFFF000為系統(tǒng)存儲(chǔ)器(system memory)的起始地址。對(duì)于STM32處理器,可以通過配置BOOT0和BOOT1兩個(gè)引腳來選擇不同的啟動(dòng)模式,如表1所列。CPU在時(shí)鐘信號(hào)的第4個(gè)上升沿鎖存BOOT引腳的值,根據(jù)兩個(gè)引腳的值將對(duì)應(yīng)的存儲(chǔ)器物理地址映射到啟動(dòng)區(qū)。

          系統(tǒng)存儲(chǔ)器也稱為“大信息塊”,有2 KB的容量。所有上市的STM32處理器,在出廠前已經(jīng)燒寫進(jìn)去自舉模式下的啟動(dòng)程序(Bootloader),并且將之鎖定防止用戶擦寫。通過配置BOOT0和BOOT1選擇系統(tǒng)存儲(chǔ)器啟動(dòng),相應(yīng)的啟動(dòng)程序在復(fù)位后得以執(zhí)行,配合PC端的通信軟件,通過USART1口允許用戶將程序燒寫到用戶Flash區(qū)。之后,將BOOT0和B00T1重新配置為用戶Flash存儲(chǔ)器啟動(dòng),進(jìn)入正常的應(yīng)用程序。
          上述的自舉模式類似于ISP編程,相比其他燒寫方式方便許多,但真正方便靈活的是在應(yīng)用中編程(IAP),只需一根串口線就可以載入程序,復(fù)位后立即執(zhí)行新的應(yīng)用程序。

          2 IAP功能原理
          在應(yīng)用中編程(IAP)使得用戶可以在程序運(yùn)行時(shí)重新對(duì)Flash進(jìn)行編程。簡(jiǎn)單地說,IAP的編程工作是:下載編譯好的二進(jìn)制文件數(shù)據(jù)到RAM;將數(shù)據(jù)重新編程到特定的Flash區(qū)。這兩個(gè)工作是由IAP驅(qū)動(dòng)程序完成的。使用IAP功能后,系統(tǒng)的固件由2部分組成:第1部分是IAP驅(qū)動(dòng),不執(zhí)行通常的功能,而是通過微控制器支持的任一種通信管道(如USB、USART、SPI等,本文使用USART)接收數(shù)據(jù),并執(zhí)行對(duì)第2部分代碼的更新;第2部分是真正的應(yīng)用程序代碼,實(shí)現(xiàn)具體的功能。這兩部分代碼共同燒寫在Flash中。要注意的是,這兩部分代碼不能重疊,否則無法實(shí)現(xiàn)IAP功能。
          系統(tǒng)上電以后,IAP驅(qū)動(dòng)首先運(yùn)行,它主要執(zhí)行如下的操作:
          ①根據(jù)硬件信號(hào)或軟件條件判斷是否需要對(duì)第2部分代碼進(jìn)行更新;
          ②如果不需要更新,則跳轉(zhuǎn)到④;
          ③執(zhí)行更新操作;
          ④跳轉(zhuǎn)到第2部分代碼執(zhí)行。
          STM3210x處理器IAP驅(qū)動(dòng)的流程如圖2所示。圖中顯示IAP主界面是利用超級(jí)終端實(shí)現(xiàn)的,傳輸協(xié)議用的是Ymodem協(xié)議。需要注意的是,由于IAP驅(qū)動(dòng)占用了用戶Flash區(qū)的一段起始空間,因此Flash的可編程最大空間要把這部分除去。

          3 IAP功能實(shí)現(xiàn)
          3.1 硬件電路
          采用STM10x型處理器作為核心。該處理器可全速工作在72 MHz,擁有3個(gè)USART接口,內(nèi)嵌128 KB Flash和20 KB SRAM。Flash是以頁(yè)的形式組織的,擦除1頁(yè)的時(shí)間約為20~40 ms;在整個(gè)工作范圍內(nèi)其擦除次數(shù)可達(dá)10 000次,經(jīng)10 000次擦除后,在+55℃的保存環(huán)境中數(shù)據(jù)保存期限仍可達(dá)20年。用戶完全不必?fù)?dān)心使用了IAP功能后對(duì)產(chǎn)品造成不良影響。
          IAP驅(qū)動(dòng)使用USART1口作為通信管道,PB口的第9引腳作為IAP判斷是否進(jìn)入IAP功能的信號(hào)線。引出一個(gè)按鍵,作為IAP功能選擇按鍵,只要在上電或復(fù)位時(shí)按住此鍵就會(huì)進(jìn)入IAP功能主界面,否則直接執(zhí)行正常應(yīng)用程序。BOOT0和BOOT1是啟動(dòng)配置跳線。相應(yīng)的硬件電路分別如圖3、圖4和圖5所示。

          存儲(chǔ)器相關(guān)文章:存儲(chǔ)器原理



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

          關(guān)鍵詞: STM 32F 32 F1

          評(píng)論


          相關(guān)推薦

          技術(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); })();