STM32F103构建固件库模板(PS固件库文件树介绍)
參考:STM32F103ZE新建固件庫(kù)模板
作者:追兮兮
發(fā)布時(shí)間:2020-10-14 10:31:45
網(wǎng)址:https://blog.csdn.net/weixin_44234294/article/details/109065495
參考博文:https://blog.csdn.net/visual_eagle/article/details/104126122
目錄
- 固件庫(kù)的使用
- 創(chuàng)建固件庫(kù)文件夾
- 固件庫(kù)官方源文件拷貝到相應(yīng)文件夾
- Libiraries(FWLIB)
- CORE
- USER
- 新建工程
- 將固件庫(kù)文件導(dǎo)入到工程
- 工程下創(chuàng)建文件夾
- 文件夾內(nèi)添加文件
- 生成.hex文件
- 添加頭文件路徑
- STM32固件庫(kù)文件樹結(jié)構(gòu)簡(jiǎn)介
- Libraries 文件夾
- Project 文件夾
- 固件庫(kù)的幫助文檔
- STM32固件庫(kù)內(nèi)部結(jié)構(gòu)功能簡(jiǎn)介
- 1. 匯編編寫的啟動(dòng)文件
- 2. 時(shí)鐘配置文件
- 3. 外設(shè)相關(guān)的
- 4. 內(nèi)核相關(guān)的
- 5. 頭文件的配置文件
- 6. 專門存放中斷服務(wù)函數(shù)的c文件
固件庫(kù)的使用
固件庫(kù)就是函數(shù)的集合,固件庫(kù)函數(shù)的作用是向下負(fù)責(zé)與寄存器直接打交道, 向上提供用戶函數(shù)調(diào)用的接口(API)。在 51的開(kāi)發(fā)中我們常常的作法是直接操作寄存器,而對(duì)于 STM32 這種級(jí)別的 MCU,數(shù)百個(gè)寄存器記起來(lái)又是談何容易。于是 ST(意法 半導(dǎo)體)推出了官方固件庫(kù),固件庫(kù)將這些寄存器底層操作都封裝起來(lái),提供一整套接口(API) 供開(kāi)發(fā)者調(diào)用,大多數(shù)場(chǎng)合下,你不需要去知道操作的是哪個(gè)寄存器,你只需要知道調(diào)用哪些函數(shù)即可。
以本博的學(xué)習(xí)板STM32F103ZET6為例,固件庫(kù)(庫(kù)函數(shù)的集合)是由官方提供的,這個(gè)官方是ST公司,而不是正點(diǎn)原子官方。也就是說(shuō)不僅僅這一型號(hào)單片機(jī),ST系列其他型號(hào)的單片機(jī)庫(kù)函數(shù)依舊可以適用。所以不必?fù)?dān)心更換板子后不知如何去編程。
任何處理器,不管它有多么的高級(jí),歸根結(jié)底都是要對(duì)處理器的寄存器進(jìn)行操作。但是固件庫(kù)不是萬(wàn)能的,如果想要把 STM32 學(xué)透,光讀 STM32 固件庫(kù)是遠(yuǎn)遠(yuǎn)不夠的,你還是要了 解一下 STM32 的原理。
創(chuàng)建固件庫(kù)文件夾
新建一個(gè)文件夾Template(自己隨意起),該目錄下四個(gè)文件夾如圖(名字也可以自己起)
- Core:一些核心文件和啟動(dòng)文件(或者分開(kāi)為:CMSIS和STARTUP)
- Libiraries(FWLIB):固件庫(kù)(外設(shè)驅(qū)動(dòng))
- Project:工程文件,keil創(chuàng)建的工程保存在此
- User:main函數(shù),應(yīng)用程序
- Doc:創(chuàng)建readme.txt工程項(xiàng)目描述文件
- 將生成的.hex文件存在于OBJ目錄下
不同人習(xí)慣不同,放置的位置會(huì)有一些區(qū)別,不過(guò)無(wú)傷大雅。
固件庫(kù)官方源文件拷貝到相應(yīng)文件夾
Libiraries(FWLIB)
STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver目錄下有inc(頭文件)和src(.c文件)兩個(gè)文件copy到Template文件夾下的Libiraries內(nèi),里面都是外設(shè)的一些驅(qū)動(dòng),如下所示。
CORE
STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport目錄下兩個(gè)文件copy到之前新建的文件Template下的CORE文件下。
\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm目錄下還要copy一個(gè)啟動(dòng)文件到CORE。
(>128kFLASH大容量的用hd,中等的用md,<64kFLASH小的用ld)戰(zhàn)艦板子就用hd
Core目錄完成,內(nèi)部顯示如下:
USER
\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x目錄下copy三個(gè)文件到USER文件。
\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template目錄下復(fù)制以下四個(gè)文件到USER。
新建工程
打開(kāi)MDK5新建工程
目錄選擇之前新建的template下的User,文件名字自己取
選擇芯片型號(hào),我這里是STM32F103ZE。
江江視頻里此處選的STM32F103C8
項(xiàng)目新建后的目錄
此時(shí)點(diǎn)擊之前新建的文件Template下的USER后:(會(huì)出現(xiàn)以下文件,點(diǎn)開(kāi)前兩個(gè)都是空文件)
將固件庫(kù)文件導(dǎo)入到工程
工程下創(chuàng)建文件夾
此時(shí)固件庫(kù)內(nèi)容的復(fù)制已經(jīng)完成,現(xiàn)在就要在MDK5中將文件導(dǎo)入到工程。在工程下創(chuàng)建文件夾。
江江視頻里的方法:
工程下創(chuàng)建文件夾:右鍵選擇Add Group,挨個(gè)添加,鼠標(biāo)長(zhǎng)按進(jìn)行修改名字。
向文件夾內(nèi)添加文件:直接在主界面雙擊文件夾,彈出添加界面進(jìn)行文件的添加。
右鍵選擇Manage Project items…創(chuàng)建三個(gè)文件夾(Keil
主界面魔術(shù)棒右邊是這個(gè)快捷鍵)。
文件夾內(nèi)添加文件
FWLIB:Add Files… \LibLIbiiraries\src(全部文件)
USER:Add Files… \USER(3個(gè).c文件)
COREc:Add Files… \CORE(.c文件+.s文件)
生成.hex文件
點(diǎn)擊魔術(shù)棒將生成的.hex文件存在于Project(大部分人之前這個(gè)文件夾都取名為OBJ)
添加頭文件路徑
此時(shí)編譯會(huì)出現(xiàn)找不到頭文件的error。
需添加頭文件路徑,編譯時(shí)自動(dòng)就把頭文件包含進(jìn)來(lái)。
發(fā)現(xiàn)編譯再次出錯(cuò)
原因:實(shí)際上User目錄下的這個(gè).h文件是沒(méi)有被導(dǎo)入進(jìn)去的
上面這句話說(shuō)明只有定義了USE_STDPERIPH_DRIVER才會(huì)包含這個(gè)頭文件,所以需要添加宏定義到Define,點(diǎn)擊ok。
再次編譯就不報(bào)錯(cuò)了
STM32固件庫(kù)文件樹結(jié)構(gòu)簡(jiǎn)介
STM32固件庫(kù)文件樹及構(gòu)成詳解(庫(kù)版本:STM32F10x_StdPeriph_Lib_V3.5.0)
庫(kù)減壓后所有文件夾構(gòu)成如下:
Libraries 文件夾
有 CMSIS 和 STM32F10x_StdPeriph_Driver 兩個(gè)目錄,這兩個(gè)目錄包含 固 件 庫(kù) 核 心 的 所 有 子 文 件 夾 和 文 件 。 其 中 CMSIS 目 錄 下 面 是 啟 動(dòng) 文 件 ,STM32F10x_StdPeriph_Driver 放的是 STM32 固件庫(kù)源碼文件。源文件目錄下面的 inc 目錄存放的是 stm32f10x_xxx.h 頭文件,無(wú)需改動(dòng)。src 目錄下面放的是 stm32f10x_xxx.c 格式的固件庫(kù)源碼文件。每一個(gè).c 文件和一個(gè)相應(yīng)的.h 文件對(duì)應(yīng)。這里的文件也是固件庫(kù)的核心文件,每個(gè)外設(shè)對(duì)應(yīng)的一組文件。
Project 文件夾
有兩個(gè)文件夾,顧名思義, STM32F10x_StdPeriph_Examples 文件夾下面存放的的 ST 官方提供的固件實(shí)例源碼,在以后的開(kāi)發(fā)過(guò)程中,可以參考修改這個(gè)官方提供的實(shí)例來(lái)快速驅(qū)動(dòng)自己的外設(shè),很多開(kāi)發(fā)板的實(shí)例都參考了官方提供的例程源碼,這些源碼對(duì)以后的學(xué)習(xí)非常重STM32F10x_StdPeriph_Template 文件夾下面存放的是工程模板。Utilities 文件下就是官方評(píng)估板的一些對(duì)應(yīng)源碼。
固件庫(kù)的幫助文檔
根目錄中還有一個(gè) stm32f10x_stdperiph_lib_um.chm 文件,直接打開(kāi)可以知道,這個(gè)文檔學(xué)習(xí)過(guò)程中非常有用
STM32固件庫(kù)內(nèi)部結(jié)構(gòu)功能簡(jiǎn)介
這里可參照視頻學(xué)習(xí):【150集-野火F103霸道/指南者視頻教程】
P16 初識(shí)STM32固件庫(kù)—我們認(rèn)為固件庫(kù)應(yīng)該是什么樣子的
1. 匯編編寫的啟動(dòng)文件
startup_ stm32f10x_ hd.s:設(shè)置堆棧指針、設(shè)置PC指針、初始化中斷向量表、配置系統(tǒng)時(shí)鐘、對(duì)用c庫(kù)函數(shù)_ main最終去到c的世界- 1
2. 時(shí)鐘配置文件
system_ stm32f10x.c: 把外部時(shí)鐘HSE=8M, 經(jīng)過(guò)PLL倍頻為72M。- 1
3. 外設(shè)相關(guān)的
stm32f10x.h: 實(shí)現(xiàn)了內(nèi)核之外的外設(shè)的寄存器映射 XXX: GPIO、 USRAT、 I2C、 SPI、 FSMC stm32f10x_ xx.c: 外設(shè)的驅(qū)動(dòng)函數(shù)庫(kù)文件 stm32f10x__xx.h:存放外設(shè)的初始化結(jié)構(gòu)體,外設(shè)初始化結(jié)構(gòu)體成員的參數(shù)列表,外設(shè)固件庫(kù)函數(shù)的聲明- 1
- 2
- 3
- 4
4. 內(nèi)核相關(guān)的
CMSIS - Cortex 微控制器軟件接口標(biāo)準(zhǔn) core_cm3.h:實(shí)現(xiàn)了內(nèi)核里面外設(shè)的寄存器映射 core_ _cm3.c . NVIC(嵌套向量中斷控制器)、sysTick(系統(tǒng)滴答定時(shí)器) misc.h misc.c- 1
- 2
- 3
- 4
- 5
- 6
5. 頭文件的配置文件
stm32f10x_ _conf.h: 頭文件的頭文件 / /stm32f10x_ _usart.h / /stm32f10x_ _i2c.h / /stm32f10x_ spi.h / /stm32f10x_ adc.h / /stm32f10x_ fsmc.h- 1
- 2
- 3
- 4
- 5
- 6
6. 專門存放中斷服務(wù)函數(shù)的c文件
stm32f10x_ it.c stm32f10x_ it.h 中斷服務(wù)函數(shù)你可以隨意放在其他的地方,并不是一定要放在stm32f10x_it.c- 1
- 2
- 3
總結(jié)
以上是生活随笔為你收集整理的STM32F103构建固件库模板(PS固件库文件树介绍)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: SVPWM学习
- 下一篇: jquery特效(6)—判断复选框是否选