STM32啟動檔案說明 解析

2021-10-09 02:57:06 字數 1652 閱讀 5572

stm32f4處理器啟動檔案(bootloader)

啟動檔案採用arm彙編程式設計。主要完成堆疊初始化、復位事件處理初始化、異常向量表的初始化等工作,並呼叫c庫__main函式進入基於c語言的主檔案中。

在復位後,cortex-m4處理器進入了執行緒模式、特權級,且使用主堆疊指標(msp)。

啟動檔案中輸入了多個全域性標號,即表示將會呼叫多個其他檔案中的程式端來完成啟動過程。

因此該啟動檔案僅能反映系統啟動時主要流程,不能夠體現其內部具體操作。

以下內容參考:

一、啟動檔案的作用是:

1.初始化堆疊指標sp;

2.初始化程式計數器指標pc;

3.設定堆、棧的大小;

4.設定異常向量表的入口位址;

5.配置外部sram作為資料儲存器(這個由使用者配置,一般的開發板可沒

有外部sram);

6.設定c庫的分支入口__main(最終用來呼叫main函式);

7.在3.5版的啟動檔案還呼叫了在system_stm32f10x.c檔案中的

systeminit()函式配置系統時鐘,在舊版本的工程中要使用者進入

main函式自己呼叫systeminit()函式。

至此可以總結一下stm32的啟動檔案和啟動過程。首先對棧和堆的大小進行定義,並在**區的起始處建立中斷向量表,其第乙個表項是棧頂位址,第二個表項是復位中斷服務入口位址。然後在復位中斷服務程式中跳轉??c/c++標準實時庫的__main函式,完成使用者堆疊等的初始化後,跳轉.c檔案中的main函式開始執行c程式。假設stm32被設定為從內部flash啟動(這也是最常見的一種情況),中斷向量表起始地位為0x8000000,則棧頂位址存放於0x8000000處,而復位中斷服務入口位址存放於0x8000004處。當stm32遇到復位訊號後,則從0x80000004處取出復位中斷服務入口位址,繼而執行復位中斷服務程式,然後跳轉__main函式,最後進入main函式,來到c的世界。

二、bootloader檔案的作用。

1、可以參考《嵌入式系統bootloader技術內幕》

bootloader 分為boot 和loader,更多的時候是針對於linux系統,windows系統裡的bios也是這個功能。就是boot 的功能是初始化堆疊、中斷向量表等引數,loader就是跳轉到main函式裡,載入使用者程式。從這個層面來理解的話,其實stm32的啟動檔案就相當於是乙個bootloader程式。

址開始寫入。此外stm32是基於cortex-m3核心的微控制器,其內部通過一張「中斷向量表」來響應中斷,程式啟動後,將首先從「中斷向量表」取出復位中斷向量執行復位中斷程式完成啟動,而這張「中斷向量表」的起始位址是0x08000004(0x8003000的程式中,中斷向量表的位址是0x8003000),當中斷來臨,stm32的內部硬體機制亦會自動將pc指標定位到「中斷向量表」處,並根據中斷源取出對應的中斷向量執行中斷服務程式。

在圖53.1.1中,stm32在復位後,先從0x08000004位址取出復位中斷向量的位址,並跳轉到復位中斷服務程式,如圖示號①所示;在復位中斷服務程式執行完之後,會跳轉到我們的main函式,如圖示號②所示;而我們的main函式一般都是乙個死迴圈,在main函式執行過程中,如果收到中斷請求(發生重中斷),此時stm32強制將pc指標指回中斷向量表處,如圖示號③所示;然後,根據中斷源進入相應的中斷服務程式,如圖示號④所示;在執行完中斷服務程式以後,程式再次返回main函式執行,如圖示號⑤所示。

STM32啟動檔案深度解析

stack size equ 0x00000400 定義棧空間大小為0x00000400,此語句等價於c define stack size 0x00000400 area stack,noinit,readwrite,align 3 定義棧,可讀寫,8位元組對齊 stack mem space s...

STM32啟動檔案深度解析

stack size equ 0x00000400 定義棧空間大小為0x00000400,此語句等價於c define stack size 0x00000400 area stack,noinit,readwrite,align 3 定義棧,可讀寫,8位元組對齊 stack mem space s...

STM32 啟動檔案

先來看看啟動 中的偽操作和偽指令 equ 用於定義常量,相當於c中的巨集定義 如stack size equ 0x00000400 define stack size 0x00000400 align 位元組對齊方式 align 3 export 相當於宣告了乙個全域性變數 export vecto...