韌體庫結構
本文使用的韌體庫是STM32F10x_StdPeriph_Lib_V3.5.0,可以在官網獲取,該韌體庫包含四個檔案夾和一個庫的說明檔案,如下圖所示,stm32f10x_stdperiph_lib_um這個英文的幫助檔案非常有用,可以很方便地了解某個庫函式的使用方法,

Project
Project檔案夾是一些寫好的官方例程,便于學習和開發,
Libraries/CMSIS/CoreSupport
Libraries檔案夾下包含了韌體庫的源代碼和啟動檔案,是韌體庫的核心所在,如果想要自己建庫,就必須包含該檔案下大部分源代碼,Libraries下包含了CMSIS和STM32F10x_StdPeriph_Driver這兩個子檔案夾,前者是內核相關檔案,后者是各種外設的驅動檔案,
CMSIS的組織結構如下圖所示,包含了CoreSupport和DeviceSupport,其中CoreSpport下是core_cm3的源檔案和頭檔案,與內核暫存器映射相關,一般不需要用戶了解和更改,

Libraries/CMSIS/DeviceSupport
DeviceSupport下包含了三個重要的檔案,如下圖所示,stm32f10x.h實作了片上外設暫存器的映射,例如GPIO暫存器、NVIC中斷暫存器等等,此外,它還include了一些重要頭檔案,例如stdint.h——定義了各種資料型別、core_cm3.h、stm32f10x_conf.h——外設頭檔案的管家,include了大部分外設驅動頭檔案、system_stm32f10x.h等,所以,一般在用戶檔案main.c里只要include stm32f10x.h就可以實作大部分頭檔案的包含,
system_stm32f10x的源檔案和頭檔案實作了STM32上電時的RCC時鐘配置,

DeviceSupport下的startup就是啟動檔案了,根據設備型別,啟動檔案有很多種,如下圖所示,其中基本型芯片的啟動檔案有startup_stm32f10x_ld.s、startup_stm32f10x_md.s、startup_stm32f10x_hd.s、startup_stm32f10x_xd.s,分別匹配16~32k、64~128k、256~512k、512~1024k的Flash容量,以STM32F103C8為例,其FLASH容量為64k,因此啟動檔案選擇startup_stm32f10x_md.s,

Libraries/STM32F10x_StdPeriph_Driver
回頭看STM32F10x_StdPeriph_Driver,其下的內容就純粹很多了,只包含inc和src檔案夾,分別是外設頭檔案和源檔案的集合,

自定義工程模板
工程檔案組
由于韌體庫默認使用的設備型號跟我們自己的芯片會有差異,這時候就需要自己來新建工程模板,首先,新建檔案結構如下圖所示,Doc存放工程代碼的說明檔案,Libraries跟官方和韌體庫相同,Project存放工程檔案,User存放用戶修改創建的代碼檔案,

先從官方韌體庫中拷貝Libraries,然后還需要從官方韌體庫的例程中拷貝三個檔案:stm32f10x_conf.h、stm32f10_it.c、stm32f10_it.h,這三個檔案所在位置如下左圖所示,拷貝到User檔案夾下后如右圖所示,

接下來,打開keil5軟體,新建工程,選擇設備,這里以STM32F103C8為例,如下圖所示:

添加工程檔案夾,效果如下:

分別為各檔案夾添加源代碼檔案,只要添加.c和啟動檔案即可,結果如下:

最后,我們還缺最重要的main.c檔案,可以自己創建一個,并且添加到工程目錄中的USER下,main.c內容如下:
#include "stm32f10x.h" int main() { while(1); }
配置魔術棒選項
Output選項卡,將輸出檔案定位到工程目錄的Output檔案夾下(如果不存在,可以新建一個),并且勾選HEX選項,如下圖所示:

C/C++選項卡下,選擇頭檔案包含路徑(將檔案夾中含頭檔案代碼的目錄都添加進來),添加兩個宏定義(否則需要在代碼中更改添加),結果如下:

Linker選項卡下配置實際使用的仿真器,這里我使用的是ST-Link,

到此為止,進行編譯,如果沒有錯誤和警告,則大功告成,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/85097.html
標籤:其他
