<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > STM32F10x在應用中編程的實(shí)現方法

STM32F10x在應用中編程的實(shí)現方法

作者: 時(shí)間:2010-02-11 來(lái)源:網(wǎng)絡(luò ) 收藏

  引 言

  Cortex-M3是首款基于A(yíng)RMv7-M體系結構的32位標準處理器,RISC結構,包含高效靈活的Thumb-2指令集,擁有杰出的低功耗特性,為微控制器系統、汽車(chē)車(chē)身控制系統、工業(yè)控制系統和無(wú)線(xiàn)網(wǎng)絡(luò )等嵌入式應用量身設計。ST公司推出基于Cortex-M3內核的STM32系列處理器,憑借其出眾的性能、創(chuàng )新的外設、優(yōu)越的功耗控制,得到眾多工程師的青睞。

  針對嵌入式應用的特點(diǎn),STM32處理器提供功能強大的硬件調試接口——JTAG接口和串行接口,極大方便了設計,縮短了產(chǎn)品的開(kāi)發(fā)周期。不僅如此,STM32處理器內嵌的閃存存儲器允許在電路編程(In-Circuit Pro-gramming,ICP)和(In-Application Program-ming,IAP)。利用,僅需通過(guò)一根串口線(xiàn),就可以完成產(chǎn)品固件的更新。本文對STM32處理器的進(jìn)行了詳細的分析,結合硬件和驅動(dòng)給出了IAP的具體實(shí)現方法,稍加修改,便可應用于STM32處理器的所有系列產(chǎn)品。

  1 處理器

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

  STM32全系列處理器具有腳對腳、外設及軟件的高度兼容性。這給應用帶來(lái)很好的靈活性,易于將應用升級到不同存儲空間或不同封裝的平臺。STM32處理器的產(chǎn)品全系列兼容,使得項目之間的代碼重用和移植很方便。

  1.2 STM32處理器

  Cortex-M3的存儲系統采用統一編址的方式,程序存儲器、數據存儲器、寄存器被組織在4 GB的線(xiàn)性地址空間內,以小端格式(little-endian)存放。如圖1所示。

內存映射

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

啟動(dòng)模式

  系統存儲器也稱(chēng)為“大信息塊”,有2 KB的容量。所有上市的STM32處理器,在出廠(chǎng)前已經(jīng)燒寫(xiě)進(jìn)去自舉模式下的啟動(dòng)程序(Bootloader),并且將之鎖定防止用戶(hù)擦寫(xiě)。通過(guò)配置BOOT0和BOOT1選擇系統存儲器啟動(dòng),相應的啟動(dòng)程序在復位后得以執行,配合PC端的通信軟件,通過(guò)1口允許用戶(hù)將程序燒寫(xiě)到用戶(hù)Flash區。之后,將BOOT0和B00T1重新配置為用戶(hù)Flash存儲器啟動(dòng),進(jìn)入正常的應用程序。

  上述的自舉模式類(lèi)似于ISP編程,相比其他燒寫(xiě)方式方便許多,但真正方便靈活的是在應用中編程(IAP),只需一根串口線(xiàn)就可以載入程序,復位后立即執行新的應用程序。

  2 IAP功能原理

  在應用中編程(IAP)使得用戶(hù)可以在程序運行時(shí)重新對Flash進(jìn)行編程。簡(jiǎn)單地說(shuō),IAP的編程工作是:下載編譯好的二進(jìn)制文件數據到RAM;將數據重新編程到特定的Flash區。這兩個(gè)工作是由IAP驅動(dòng)程序完成的。使用IAP功能后,系統的固件由2部分組成:第1部分是IAP驅動(dòng),不執行通常的功能,而是通過(guò)微控制器支持的任一種通信管道(如USB、、SPI等,本文使用)接收數據,并執行對第2部分代碼的更新;第2部分是真正的應用程序代碼,實(shí)現具體的功能。這兩部分代碼共同燒寫(xiě)在Flash中。要注意的是,這兩部分代碼不能重疊,否則無(wú)法實(shí)現IAP功能。

  系統上電以后,IAP驅動(dòng)首先運行,它主要執行如下的操作:

 ?、俑鶕布盘柣蜍浖l件判斷是否需要對第2部分代碼進(jìn)行更新;

 ?、谌绻恍枰?,則跳轉到④;

 ?、蹐绦懈虏僮?;

 ?、芴D到第2部分代碼執行。

  STM3210x處理器IAP驅動(dòng)的流程如圖2所示。圖中顯示IAP主界面是利用超級終端實(shí)現的,傳輸協(xié)議用的是Ymodem協(xié)議。需要注意的是,由于IAP驅動(dòng)占用了用戶(hù)Flash區的一段起始空間,因此Flash的可編程最大空間要把這部分除去。

STM3210x處理器IAP驅動(dòng)的流程

  3 IAP功能實(shí)現

  3.1 硬件電路

  采用型處理器作為核心。該處理器可全速工作在72 MHz,擁有3個(gè)USART接口,內嵌128 KB Flash和20 KB SRAM。Flash是以頁(yè)的形式組織的,擦除1頁(yè)的時(shí)間約為20~40 ms;在整個(gè)工作范圍內其擦除次數可達10 000次,經(jīng)10 000次擦除后,在+55℃的保存環(huán)境中數據保存期限仍可達20年。用戶(hù)完全不必擔心使用了IAP功能后對產(chǎn)品造成不良影響。

  IAP驅動(dòng)使用USART1口作為通信管道,PB口的第9引腳作為IAP判斷是否進(jìn)入IAP功能的信號線(xiàn)。引出一個(gè)按鍵,作為IAP功能選擇按鍵,只要在上電或復位時(shí)按住此鍵就會(huì )進(jìn)入IAP功能主界面,否則直接執行正常應用程序。BOOT0和BOOT1是啟動(dòng)配置跳線(xiàn)。相應的硬件電路分別如圖3、圖4和圖5所示。

IAP通信管道USART1

按鍵電路

啟動(dòng)配置電路

  3.2 IAP驅動(dòng)

  IAP驅動(dòng)主要包含如下源文件。

  main.c:完成Flash解鎖、按鍵端口初始化、按鍵判斷、USART1的初始化以及處理器的始終初始化,另外還初始化指針和跳轉到應用程序處語(yǔ)句。然后從common.c執行主菜單。

  common.c:顯示主菜單。主菜單上顯示一系列操作,如加載二進(jìn)制文件、執行應用程序以及禁止寫(xiě)保護(如果事先Flash被寫(xiě)保護)。

  download.c:等待用戶(hù)選擇傳送文件操作,或者放棄操作以及一些提示信息,但真正實(shí)現傳送的是ymodem.c源文件。

  ymodem.c:負責從超級終端接收數據(使用Ymodem協(xié)議),并將數據加載到內部RAM中。如果接收數據正常,則將數據編程到Flash中;如果發(fā)生錯誤,則提示出錯。

  3.3 軟件實(shí)現

  要實(shí)現IAP功能,還需做一些準備工作:

 ?、僖獪蕚銪IN類(lèi)型的代碼文件。開(kāi)發(fā)環(huán)境使用的是Keil,默認情況下Keil生成HEX類(lèi)型的編譯文件。利用Keil自帶的fromelf.exe工具,就可以生成二進(jìn)制文件。

 ?、趯Τ壗K端進(jìn)行設置。IAP驅動(dòng)中對USART1的設置為:波特率為115 200 kb/s,8位數據位,1位停止位,無(wú)校驗位和硬件控制。超級終端也必須保持相同設置。

  IAP驅動(dòng)和應用程序代碼需要分配在Flash的合適位置。圖6是2部分代碼在Flash中的存儲情況。由于IAP驅動(dòng)代碼占用8 KB的空間,故而將Flash最初的8 KB劃出來(lái),應用程序是從0x08020000地址處開(kāi)始存放的。這是通過(guò)在common.h頭文件中語(yǔ)句定義的:

  #define ApplicationAddress 0x08020000

  也可以定義在其他0x08020000地址后的任何位置,只要保證應用程序大小不超過(guò)所用處理器Flash的容量。在platform_config.h頭文件中有定義Flash的語(yǔ)句:

  #define PAGE_SIZE(0x400) //Flash頁(yè)大小為1 KB

  #define FLASH_SIZE(0x20000)//Flash容量為128 KB

  處理器有2種Flash頁(yè)的大?。? KB和2 KB。通過(guò)以上語(yǔ)句即可定義頁(yè)大小。

  在platform_config.h頭文件中還定義了進(jìn)入IAP功能選擇按鍵映射引腳:

程序

  IAP驅動(dòng)在Keil中編譯、鏈接后,利用ARM公司的RealView ULINK2仿真器將生成的HEX文件燒寫(xiě)到Flash中。此時(shí)Keil自帶的Flash燒寫(xiě)工具要設置Flash的起始地址為0x08000000。在應用程序中,定義向量表的函數NVIC_SetVectorTabl(NVIC_VectTab_FLASH,0x2000)中的第2個(gè)參數,即Flash的偏移量一定要設置成0x2000或更大的數值。同時(shí),Flash燒寫(xiě)工具也要做相對應的設置。將系統的串口與PC機串口相連,打開(kāi)已經(jīng)設置好參數的超級終端。將BOOT0跳線(xiàn)為0,BOOT1為0或1都可以。按住IAP功能選擇按鍵,給系統上電。此時(shí),在超級終端就會(huì )顯示IAP功能主界面,如圖7所示。

Flash存儲分配

IAP功能主界面

  在鍵盤(pán)上按1選擇待載入二進(jìn)制文件,界面上會(huì )出現提示語(yǔ)。在“傳送”菜單中選擇傳送文件后,只需幾秒鐘可以將6 KB左右的文件燒寫(xiě)到Flash。下載完后,在鍵盤(pán)上按2或復位就可以直接執行應用程序了,如圖8所示。雖然IAP功能使用的是USART1口,但進(jìn)入應用程序后就可以正常使用USART1口。隨時(shí)可以通過(guò)復位后按住IAP功能選擇鍵來(lái)進(jìn)行IAP方式燒寫(xiě)應用程序。

成功下載應用程序

  結 語(yǔ)

  STM32F10x處理器性能出眾,已被廣泛應用于各種場(chǎng)合。其IAP功能給用戶(hù)帶來(lái)了極大方便,使得產(chǎn)品的固件更新快捷、簡(jiǎn)單。本文闡述了IAP的基本原理,并詳細描述了如何在STM32F10x處理器平臺中實(shí)現IAP功能,并在所設計的系統中進(jìn)行了IAP實(shí)驗。實(shí)驗證明,該款處理器的IAP功能可靠、快捷。



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>