轉STM32官方固件庫簡介


ST(意法半導體)為了方便用戶開發程序,提供了一套豐富的 STM32 固件庫。固件庫就是函數的集合,固件庫函數的作用是向下負責與寄存器直接打交道,向上提供用戶函數調用的接口(API) 。固件庫將這些寄存器底層操作都封裝起來,提供一整套接口(API)供開發者調用,大多數場合下,你不需要去知道操作的是哪個寄存器,你只需要知道調用哪些函數即可。

ARM 公司為了能讓不同的芯片公司生產的 Cortex-M3 芯片能在軟件上基本兼容,和芯片生產商共同提出了一套標准 CMSIS 標准(Cortex  Microcontroller  Software  Interface  Standard)  ,翻譯過來是“ARM Cortex?  微控制器軟件接口標准”。 ST 官方庫就是根據這套標准設計的。

CMSIS 分為 3 個基本功能層:

1)  核內外設訪問層:ARM 公司提供的訪問,定義處理器內部寄存器地址以及功能函數。

2)  中間件訪問層:定義訪問中間件的通用 API,也是 ARM 公司提供。

3)  外設訪問層:定義硬件寄存器的地址以及外設的訪問函數。

 CMSIS 層在整個系統中是處於中間層,向下負責與內核和各個外設直接打交道,向上提供實時操作系統用戶程序調用的函數接口。如果沒有 CMSIS 標准,那么各個芯片公司就會設計自己喜歡的風格的庫函數,而 CMSIS 標准就是要強制規定,芯片生產公司設計的庫函數必須按照 CMSIS 這套規范來設計。

一個簡單的例子,我們在使用 STM32 芯片的時候首先要進行系統初始化, CMSIS 規范就規定,系統初始化函數名字必須為 SystemInit,所以各個芯片公司寫自己的庫函數的時候就必須用 SystemInit 對系統進行初始化。CMSIS 還對各個外設驅動文件的文件名字規范化,以及函數名字規范化等等一系列規定。

 ST 官方提供的固件庫完整包可以在官方下載,固件庫是不斷完善升級的,所以有不同的版本,我們使用的是 V3.5 版本的固件庫,STM32F10x_StdPeriph_Lib_V3.5.0  下面查看

 

文件夾介紹:

Libraries 文件夾下面有 CMSIS 和 STM32F10x_StdPeriph_Driver 兩個目錄,這兩個目錄包含 固 件 庫 核 心 的 所 有 子 文 件 夾 和 文 件 。 其 中 CMSIS 目 錄 下 面 是 啟 動 文 件 ,STM32F10x_StdPeriph_Driver 放的是 STM32 固件庫源碼文件。源文件目錄下面的 inc 目錄存放的是 stm32f10x_xxx.h 頭文件,無需改動。src 目錄下面放的是 stm32f10x_xxx.c 格式的固件庫源碼文件。每一個.c 文件和一個相應的.h 文件對應。這里的文件也是固件庫的核心文件,每個外設對應一組文件。

Libraries 文件夾里面的文件在我們建立工程的時候都會使用到。

Project 文件夾下面有兩個文件夾。顧名思義, STM32F10x_StdPeriph_Examples 文件夾下面存放的 ST 官方提供的固件實例源碼,在以后的開發過程中,可以參考修改這個官方提供的實例來快速驅動自己的外設,很多開發板的實例都參考了官方提供的例程源碼,這些源碼對以后的學習非常重要。STM32F10x_StdPeriph_Template 文件夾下面存放的是工程模板。

Utilities 文件下就是官方評估板的一些對應源碼,這個可以忽略不看。 

根目錄中還有一個 stm32f10x_stdperiph_lib_um.chm 文件,直接打開可以知道,這是一個固件庫的幫助文檔,這個文檔非常有用,只可惜是英文的,在開發過程中,這個文檔會經常被使用到。

 

關鍵文件介紹:

下面我們要着重介紹 Libraries 目錄下面幾個重要的文件。core_cm3.c 和 core_cm3.h 文件位於\Libraries\CMSIS\CM3\CoreSupport 目錄下面的,這個就是 CMSIS 核心文件,提供進入 M3 內核接口,這是 ARM 公司提供,對所有 CM3 內核的芯片都一樣。你永遠都不需要修改這個文件,所以這里我們就點到為止。

和 CoreSupport 同一級還有一個 DeviceSupport 文件夾。eviceSupport\ST\STM32F10xt 文件夾下面主要存放一些啟動文件以及比較基礎的寄存器定義以及中斷向量定義的文件。這個目錄下面有三個文件:system_stm32f10x.c,  system_stm32f10x.h 以及 stm32f10x.h 文件。其中 system_stm32f10x.c 和對應的頭文件 system_stm32f10x.h 文件的功能是設置系統以及總線時鍾,這個里面有一個非常重要的 SystemInit()函數,這個函數在我們系統啟動的時候都會調用,用來設置系統的整個時鍾系統。

stm32f10x.h 這個文件就相當重要了,只要你做 STM32 開發,你幾乎時刻都要查看這個文件相關的定義。這個文件打開可以看到,里面非常多的結構體以及宏定義。這個文件里面主要是系統寄存器定義申明以及包裝內存操作,對於這里是怎樣申明以及怎樣將內存操作封裝起來的


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM