arm 是乙個做晶元標準的公司,它負責的是晶元核心的架構設計,而 ti,st 這樣的公司,他們並不做標準,他們是晶元公司,他們是根據 arm 公司提供的晶元核心標準設計自己的晶元。所以,任何乙個做 晶元 (例如cortex-m3),他們的核心結構都是一樣的,不同的是他們的儲存器容量,片上外設,io 以及其他模組的區別。所以你會發現,不同公司設計的 晶元(例如cortex-m3)他們的埠數量,串列埠數量,控制方法這些都是有區別的,這些資源他們可以根據自己的需求理念來設計。同一家公司設計的多種核心晶元(例如cortex-m3)的片上外設也會有很大的區別.通過arm公司的《cortex-m3 權威指南》中的乙個圖來了解一下:
arm 公司為了能讓不同的晶元公司生產的 cortex-m3 晶元能在軟體上基本相容,和晶元生產商共同提出了一套標準 cmsis 標準(cortex microcontroller software inte***ce standard ) ,翻譯過來是「arm cortex™ 微控制器軟體介面標準」。 st 官方庫就是根據這套標準設計的。基於 cmsis 應用程式基本結構:
我們在使用 stm32 晶元的時候首先要進行系統初始化, cmsis 規範就規定,系統初始化函式名字必須為 systeminit,所以各個晶元公
司寫自己的庫函式的時候就必須用 systeminit 對系統進行初始化。cmsis 還對各個外設驅動檔案的檔案名字規範化,以及函式名字規範化等等一系列規定。上一節講的函式gpio_resetbits 這個函式名字也是不能隨便定義的,是要遵循 cmsis 規範的。至於 cmsis 的具體內容就不必多講了,需要了解詳細的朋友可以到網上搜尋資料
官方 v3.5 版本的韌體庫包的目錄結構:
有 cmsis 和 stm32f10x_stdperiph_driver 兩個目錄,這兩個目錄包含 固 件 庫 核 心 的 所 有 子 文 件 夾 和 文 件 。 其 中 cmsis 目 錄 下 面 是 啟 動 文 件 ,stm32f10x_stdperiph_driver 放的是 stm32 韌體庫原始碼檔案。源檔案目錄下面的 inc 目錄存放的是 stm32f10x_***.h 標頭檔案,無需改動。src 目錄下面放的是 stm32f10x_***.c 格式的韌體庫原始碼檔案。每乙個.c 檔案和乙個相應的.h 檔案對應。這裡的檔案也是韌體庫的核心檔案,每個外設對應的一組檔案。
有兩個資料夾,顧名思義, stm32f10x_stdperiph_examples 資料夾下面存放的的 st 官方提供的韌體例項原始碼,在以後的開發過程中,可以參考修改這個官方提供的例項來快速驅動自己的外設,很多開發板的例項都參考了官方提供的例程原始碼,這些原始碼對以後的學習非常重stm32f10x_stdperiph_template 資料夾下面存放的是工程模板。utilities 檔案下就是官方評估板的一些對應原始碼。
根目錄中還有乙個 stm32f10x_stdperiph_lib_um.chm 檔案,直接開啟可以知道,這個文件學習過程中非常有用
位於\libraries\cmsis\cm3\coresupport 目錄下面的core_cm3.c 和 core_cm3.h 檔案。這是 arm 公司提供,對所有 cm3 核心的晶元都一樣,你永遠都不需要修改這個檔案!
位於\libraries\cmsis\cm3\devicesupport目錄下有三個檔案:system_stm32f10x.c, system_stm32f10x.h 以及 stm32f10x.h 檔案。
system_stm32f10x.c, system_stm32f10x.h檔案
在這對檔案裡面有乙個非常重要的 systeminit()函式,這個函式在我們系統啟動的時候都會呼叫,用來設定系統的整個時鐘系統。
stm32f10x.h 檔案
這個檔案相當重要,只要你做 stm32 開發,你幾乎時刻都要檢視這個檔案相關的定義。這個檔案開啟可以看到,裡面非常多的結構體以及巨集定義。這個檔案裡面主要
是系統暫存器定義申明以及包裝記憶體操作········
啟動檔案
位於devicesupport\st\stm32f10x \startup資料夾下,在\startup\arm 目錄下,我們可以看到 8 個 startup 開頭的.s 檔案。這裡之所以有 8 個啟動檔案,是因為對於不同容量的晶元啟動檔案不一樣。對於 103 系列,主要是用其中 3 個啟動檔案:
startup_stm32f10x_ld.s : 適用於小容量 產品
startup_stm32f10x_md.s : 適用於中等容量產品
startup_stm32f10x_hd.s : 適用於大容量產品
這裡的容量是指 flash 的大小.判斷方法如下:
小容量:flash≤32k
中容量:64k≤flash≤128k
大容量:256k≤flash
對於本人使用的stm32-f103-zet06屬於大容量產品,所以做工程的時候選擇startup_stm32f10x_hd.s檔案
啟動檔案作用:開啟啟動檔案看看:啟動檔案主要是進行堆疊之類的初始化, 中斷向量表以及中斷函式定義。啟動檔案要引導進入 main 函式。 reset_handler中斷函式是唯一實現了的中斷處理函式,其他的中斷函式基本都是死迴圈。 跟蹤工程,會發現reset_handler 在我
們系統啟動的時候會呼叫,下面讓我們看看 reset_handler 這段**:
; reset handler
reset_handler proc
export reset_handler [weak]
import __main
import systeminit
ldr r0, =systeminit
blx r0
ldr r0, =__main
bx r0
endp
據import __main知道,這裡匯入 main 函式,同時在進入 main 函式之前,且呼叫 systeminit 系統初始化函式。注釋:引導程式進入__main(此__main是c_library中的函式,非main()),這裡啟動檔案只講到這:詳細可去搜尋相應型號的晶元啟動檔案的解析
stm32f10x_it.c、stm32f10x_it.h顧名思義
這對檔案是用來中斷服務函式,stm32f10x_conf.h
(confer:參看)
檔案開啟可以看到一堆的#include,這裡你建立工程的時候,可以注釋掉一些你不用的外設標頭檔案.
STM32韌體庫檔案分析
1 彙編編寫的啟動檔案 startup stm32f10x hd.s 設定堆疊指標 設定pc指標 初始化中斷向量表 配置系統時鐘 對用c庫函式 main最終去到c的世界 2 時鐘配置檔案 system stm32f10x.c 把外部時鐘hse 8m,經過pll倍頻為72m。3 外設相關的 stm32...
STM32韌體庫模版
開發工具 keil4 剛開始用這個庫的時候很無助,因為第一次用韌體庫 以下是我建立模版的步驟和注意事項 1.解壓韌體庫後先觀察目錄的整體結構,可以知道韌體庫裡面要弄出來的東西是libraries目錄,project目錄是韌體庫的應用,可以為今後開發專案做參考。2.現在建立乙個keil4的新工程,規劃...
STM32韌體庫介紹
前言 主要內容 htmresc 資料夾 libraries 資料夾 project 資料夾 utilities 資料夾 stm32f10x stdperiph lib um.chm 前言 本文以stm32f1韌體庫包為例,其他的資料夾目錄結構一樣的。解壓後出現四個資料夾,乙個幫助文件,乙個網頁鏈結。...