<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è) > 嵌入式系統 > 設計應用 > STM32再學(xué)習――啟動(dòng)流程分析

STM32再學(xué)習――啟動(dòng)流程分析

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

我們寫(xiě)嵌入式程序,基本上采用C語(yǔ)言來(lái)編寫(xiě),以main( )作為程序的入口。但實(shí)際上,mian()并不是最先要執行的,在這之前需要做一些基本的工作,如堆、棧的定義;main函數的復位連接等,這些工作就需要一個(gè)專(zhuān)門(mén)的啟動(dòng)程序來(lái)完成,由于需要做的工作內容不多,并且需要更直接的管理內存,一般采用匯編編寫(xiě)。

本文引用地址:http://dyxdggzs.com/article/201610/307478.htm

無(wú)論是STM32、ARM系列的單片機,還是簡(jiǎn)單的如51,PIC等,都以為上述原因,需要啟動(dòng)程序,只不過(guò)51,PIC等單片機的啟動(dòng)程序已經(jīng)在相應的IDE編譯、鏈接的時(shí)候隱含的編譯了,故在寫(xiě)單片機程序的時(shí)候無(wú)需考慮。而STM32的啟動(dòng)有相應的啟動(dòng)文件,本文將采用KEIL MDK自帶的啟動(dòng)文件STM32F10x.s進(jìn)行分析。

1 啟動(dòng)模式的選擇

STM32芯片自帶的啟動(dòng)方式有3種如下表

啟動(dòng)模式選擇引腳

啟動(dòng)模式說(shuō)明
BOOT1BOOT0
X0主閃存存儲器主閃存存儲器作為啟動(dòng)區域
01系統存儲器系統存儲器作為啟動(dòng)區域
11內置SRAM內置SRAM作為啟動(dòng)葡萄

STM32的啟動(dòng)選擇,通過(guò)設置BOOT1、BOOT0的引腳的高低電平即可選擇。其中主閃存啟動(dòng)是將程序下載到內置的Flash進(jìn)行啟動(dòng)(該flash可運行程序),該程序可以掉電保存,下次開(kāi)機可自動(dòng)啟動(dòng);系統存儲器啟動(dòng)是將程序寫(xiě)入到一快特定的區域,一般由廠(chǎng)家直接寫(xiě)入,不能被隨意更改或擦除。內置SRAM啟動(dòng),由于SRAM掉電丟失,不能保存程序,一般只用于程序的調試。

就程序的啟動(dòng)而言,采用以上3種方式啟動(dòng),但對于一個(gè)嵌入式系統的程序來(lái)說(shuō),如果程序執行文件很大,而STM32內置的存儲空間有限,就需要外置Nand flash/Nor flash 和SDRAM,即程序存儲在flash中,程序執行在SDRAM中,既節約了成本有提高了運行效率。如果采用外置的Flash+SDRAM的方式,就需要一個(gè)更加復雜的啟動(dòng)文件(bootloader),需要考慮flash的COPY,Flash的驅動(dòng),內存的管理,通信機制等,本文暫不涉及此內容,以后有機會(huì )專(zhuān)門(mén)講述。

2 啟動(dòng)文件STM32F10x.s分析

關(guān)于STM32F10x.s的啟動(dòng)文件,主要做了3個(gè)工作:分配和初始化堆、棧;定義復位向量并初始化;中斷向量表及其相應的異常處理程序。

2.1 定義堆、棧及其初始化

堆和棧是能夠運行C語(yǔ)言的前提,如以下程序:

定義棧:

Stack_Size EQU 0x00000200

AREA STACK, NOINIT, READWRITE, ALIGN=3

Stack_Mem SPACE Stack_Size

__initial_sp

定義堆:

Heap_Size EQU 0x00000000

AREA HEAP, NOINIT, READWRITE, ALIGN=3

__heap_base

Heap_Mem SPACE Heap_Size

__heap_limit

初始化堆、棧:

_user_initial_stackheap

LDR R0, = Heap_Mem

LDR R1, =(Stack_Mem + Stack_Size)

LDR R2, = (Heap_Mem + Heap_Size)

LDR R3, = Stack_Mem

BX LR

2.2 定義復位向量

Boot引腳的設置不同,復位時(shí),起始地址的位置不同,SRAM的起始地址為0x2000000, flash的起始地址為0x8000000。Cortex-M3內核規定,起始地址必須存放堆定指針,而第二個(gè)地址必須存放復位中斷入口向量。在系統復位時(shí),內核會(huì )自動(dòng)從其實(shí)地址的下一個(gè)地址(即32位)空間取出復位中斷入口向量,然后跳轉到復位中斷服務(wù)程序,該服務(wù)程序就會(huì )跳轉到main()執行程序。

中斷向量表(部分向量):

__Vectors

DCD __initial_sp ; Top of Stack // 初始化堆跳轉

DCD Reset_Handler ; Reset Handler // 復位中斷向量跳轉

DCD NMI_Handler ; NMI Handler

DCD HardFault_Handler ; Hard Fault Handler

DCD MemManage_Handler ; MPU Fault Handler

DCD BusFault_Handler ; Bus Fault Handler

DCD UsageFault_Handler ; Usage Fault Handler

DCD 0 ; Reserved

DCD 0 ; Reserved

DCD 0 ; Reserved

DCD 0 ; Reserved

DCD SVC_Handler ; SVCall Handler

DCD DebugMon_Handler ; Debug Monitor Handler

DCD 0 ; Reserved

DCD PendSV_Handler ; PendSV Handler

DCD SysTick_Handler ; SysTick Handler

復位中斷服務(wù)程序

; Reset Handler // 該程序會(huì )跳轉到main()

Reset_Handler PROC

EXPORT Reset_Handler [WEAK]

IMPORT __main

LDR R0, =__main

BX R0

ENDP

3 其他中斷向量及服務(wù)子程序

在啟動(dòng)文件中,只定義了中斷向量,其相應的服務(wù)子程序跳轉到空操作。為以后擴展中斷服務(wù)程序做了準備。

在以上這些都勝利跑完之后,我們的微處理器(MCU)就開(kāi)始main函數之旅……

  • STM32單片機中文官網(wǎng)
  • STM32單片機官方開(kāi)發(fā)工具
  • STM32單片機參考設計


關(guān)鍵詞: STM32 嵌入式

評論


相關(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>