為什么會有固件庫
對于51核的8位單片機我們在進行開發時,我們是直接進行配置單片機的寄存器,控制芯片的工作方式。只要我們明白寄存器各位的功能和設置方法,直接進行賦值就可以了。 不存在固件庫的問題。那么使用ARM 32位 CORTEX -M3核心的STM32芯片為什么有固件庫呢? 當然在使用STM32時也可以像51那樣脫離固件庫,自己進行配置開發。 對于SMT32因為其外設資源非常的豐富,必然帶來寄存器的數量十分龐大并且比較復雜,這時直接配置寄存器方式的就會帶來: 開發速度慢 程序可讀性差 這兩個缺陷會直接影響開發效率,程序的維護和交流。而庫開發方式能很好的彌補這兩個缺陷。 兩種思路的對比: 相對于庫開發的方式,直接配置寄存器的方式生成的代碼量的確會少一點,但是SMT32有充足的資源,權衡庫的優勢與不足,絕大部分時候,我們愿意犧牲一點資料,選擇庫開發。 一般只在對代碼運行時間要求極其苛刻的地方,才使用直接配置寄存器的方式替代。如頻繁調用中斷服務程序。 STM32結構及庫層次關系 基于CORTEX的某系列芯片采用的內核都是相同的,區別是核外的片上外設的差異,這些差異導致軟件在同內核,不同外設的芯片上移植的困難。為解決不同芯片廠商生產的CORTEX微控制器軟件的兼容性問題,ARM與芯片廠商建立了CMSIS標準。即 Cortex MicroController software Interface Standard ;CORTEX 微控制器軟件接口標準 CMSIS包括了: 內核函數層:其中包含用于訪問內核寄存器的名稱、地址定義,主要由ARM公司提供。 設備外設訪問層:提供了片上的核外外設的地址和中斷定義,主要由芯片生產商提供。 CMSIS層位于硬件層與操作系統或用戶層之間,提供了芯片生產商無關的硬件抽象層,可以為借口外設、實時操作系統提供簡單的處理器軟件接口,屏蔽了硬件差異,這對軟件的移植是有極大的好處的。 STM32的庫,就是按照CMSIS標準建立的。 固件庫主要文件說明: -htmresc: LOGO Libraries : 驅動庫的源代碼及啟動文件 Project :用驅動庫寫的例子個一個工程模板 Utilities:基于STM官方開發板的例子 Release_Notes.html:庫版本更新說明 stm32f10x_stdperiph_lib_um.chm:庫幫助文件 Core_cm3.c和core_cm3.h 作用:為采用CORTEX—M3核的芯片商設計的芯片外設提供一個進入M3內核的接口。 只要是采用了M3的核,不同公司的芯片的這兩個文件是相同。 這兩個文件在我們的工程文件是不可缺少的。 System_stm32f10x.c文件 是由ST公司提供的。功能是設置系統時鐘和總線時鐘。M3比51單片機復雜的多,它不像51直接接一個8M的晶振就可以工作了,我們還要通過M3核的核內寄存器對8M的時鐘進行倍頻、分頻,或者使用芯片內部的時鐘。所有的外設都與時鐘的頻率相關,所以這個文件的時鐘配置是很關鍵的。 在實現系統時鐘的時候要用到PLL(鎖相環),這就需要操作寄存器,寄存器都是以存儲器映射的方式來進行訪問的,所以該文件中包含了stm32f10x.h這個頭文件。 Stm32f10x.h文件 是一個很重要很底層的文件 所有的處理器廠商都會將對內存的操作封裝成一個宏,即我們通常說的寄存器,并且把這些實現封裝成一個系統文件,包含在相應的開發環境中。這樣在開發自己的應用程序時只要將這個文件包含進來就可以了。 啟動文件 Libraries/CMSIS/core/CM3/startup/arm文件夾下由匯編編寫的系統啟動文件,不同的文件對應不同的芯片型號。 文件名的英文縮寫的意義如下: Cl:互聯型產片,STM32F105/107系列 Vl: 超值型產品,STM32F100系列 Xl: 超高容量產品,STM32F101/103系列 Ld: 低密度產品,FLASH小于64K Md: 中密度產品,FLASH=64 or 128K Hd: 高密度產品,FLASH大于128K 啟動文件是任何處理器在上電復位后最先運行的一段匯編程序。在我們編寫的C代碼開始運行之前,需要由匯編語言為C語言的運行建立一個合適的環境,接下來才能運行我們的程序。所以要把啟動文件添加進我們的工程中去。 啟動文件的作用: 1、初始化堆棧指針SP; 2、初始化程序計數器指針PC; 3、設置堆、棧的大小 4、設置異常向量表的入口地址 5、配置外部SRAM作為數據存儲器 6、設置C庫的分支入口___main 7、在3.5版本的啟動文件中還調用了在system_stm32f10x.c文件中的SystemIni()函數配置系統時鐘,在舊的版本中需要用戶進入main函數自己調用這個函數。 Inc和src 位于libraries/STM32F10X_StdPeriph_Driver文件夾下,inc即include的縮寫,src即source的縮寫。屬于CMSIS的設備外設函數部分。這些外設是芯片制造商在M3核外加進去的。 在src和inc文件夾中是ST公司針對每個STM32外設編寫的庫函數文件,每個外設對應一個.c和.h文件。在進行開發時,可以用到那個模塊就將那兩個文件包含到工程中。 還有一個很特別的misc.c文件,這個文件提供了外設對內核的NVIC(中斷向量控制器)的訪問函數 ,在配置中斷時,必須把這個文件添加到工程中。 Stm32f10x_it.c 和 stm32f10x_conf.h文件 Stm32f10x_it.c ,專門用來編寫中斷服務函數的,在我們修改前,這個文件已經定義了一些系統異常的接口,其他的普通中斷服務函數由我們自己添加。這些中斷函數的入口不是我們隨意可以定的,可以去匯編啟動文件中找到。 stm32f10x_conf.h,這個文件被包含進stm32f10x.h文件。用來配置使用了什么外設的頭文件,用這個頭文件可以很方便的增加或刪除外設驅動函數庫。 庫文件之間的關系 庫文件直接包含進工程即可,有些文件則需要我們根據使用到的功能進行配置。 各個文件在庫工程中的層次或關系 stm32f10x_stdperiph_lib_um.chm:庫幫助文件 庫函數就是STM32的庫文件中為我們編寫好的函數接口,我們只要調用這些庫函數,就能對STM32進行配置,達到控制的目的。 調用函數式必須知道:函數的功能、可傳入的參數及其意義和函數的返回值。 庫函數提供的函數的數量也是極其龐大的,這時就需要好好的利用這個庫幫助文件,進行查找。同時由于每個函數和數據類型都是按照“見名知義”的原則編寫的,這樣名稱比較長,在進行輸入時很容易出錯,也可以在開發軟件時,在用到庫函數的時候,直接把幫助文件中的函數復制到工程文件中,避免出錯。 以上內容節選至《野火》,感謝分享。 看了STM32的庫才發現,原來嵌入式C語言程序應該這樣來編寫,可以如此的簡潔流暢與優美。對一個系統架構的構思,對每個細節表達,對指針,變量,函數,純熟的應用。對庫的編寫者深深折服,看到了大師的風范。相見恨晚。
|