找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5851|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

關(guān)于STM32的固件庫

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

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表