STM32 標準韌體庫的下載,檔案介紹和工程的建立(綜合)
前言
- 博文基於ARM Cortex-M3核心的STM32F103ZET6晶片和標準3.5.0庫;
- 博文介紹標準庫中個資料夾的含義和以及一個簡單工程的建立;
- 如有不足之處還請博友多多指教;
標準庫的下載
標準庫的獲取方式: 第一步:進入官網:https://www.st.com/content/st_com/zh.html 第二步:依次進行下列操作 在下面這個表格裡,能看到很多系列的標準庫,可以根據自己需求選擇;這裡我選擇STM32F10x系列; (下面這個表格是根據晶片選擇的,或許有人會有一個疑問:為什麼選擇了第三個,明明第一個也是支援STM32F10x的,原因就是版本不同,第三個是目前最新的版本,第一個是過去的版本)
標準庫各檔案的含義
- 將下載的壓縮包解壓縮後會看到這個資料夾:資料夾名字的含義是:STM32F10x系列處理器的標準庫,版本3.5.0 基於庫函式開發的專案,每次建立新的工程都要訪問這個資料夾;
- 進入後可以看到下列資料夾
** _htmresc**:不用在意這個資料夾,就兩張ST的照片;
Utilities:實用程式,提供了很多小的程式,比如ASCII碼的編碼,IIC通訊的程式碼等;這個學習前期也可以不用在意;
Release_Notes.html
- core_cm3.c和core_cm3.h:由ARM公司提供的CMSIS核心檔案,提供進入M3核心的介面;(此檔案儘量不能改)
資料夾startup
- startup_stm32f10x_XX.s:晶片啟動檔案;主要功能有兩個:① 程式開始執行後,使程式進入系統初始化函式SystemInit(),在此處,完成對晶片的時鐘系統,管腳等進行初始化;② 初始化結束後使程式進入主函式main()進行; 這裡發現一個問題:arm資料夾下不止這一種,那麼應該選擇哪一個那?看下錶
檔名 | 含義 | 容量範圍 |
---|---|---|
startup_stm32f10x_ld.s | 小容量啟動檔案 | FLASH≤32K |
startup_stm32f10x_md.s | 中等容量啟動檔案 | 64K≤FLASH≤128K |
startup_stm32f10x_hd.s | 大容量啟動檔案 | 256K≤FLASH |
(其他幾個暫時用不著,先不介紹,後續用到的時候再補充)
- stm32f10x.h:STM32F10x系列晶片標頭檔案,是所有外設的標頭檔案,這個經常被各個原始檔呼叫的標頭檔案; system_stm32f10x.c和system_stm32f10x.h:系統配置檔案;其中包括的System()函式用來配置初始化的整個時鐘系統; inc:晶片外設標頭檔案;包含所有STM32晶片外設的所有標頭檔案;一般在建立工程的時候用到那個外設就呼叫那個外設標頭檔案,和src搭配使用; src:晶片外設原始檔;包含所有STM32晶片外設的所有原始檔;一般在建立工程的時候用到那個外設就呼叫那個外設原始檔,和inc搭配使用;
Project: 工程資料夾;此資料夾提供了建立工程的模板和模組的例程; STM32F10x_StdPeriph_Examples:包含標準庫所有外設例程;例程內是ST公司提供的模組程式碼,根據需要可以直接摘取使用; STM32F10x_StdPeriph_Template:建立一個庫開發工程的模板;我們下面建立工程的時候可以效仿這個模板,模板的意思就是這個是ST公司的工程師提供的,但是用不用這個模板看個人愛好,一般我們建立工程都有自己的風格,但關鍵性的庫檔案都是一樣的;main.c很常見,我們建工程的時候自己建也可以;stm32f10x_conf.h是配置檔案;stm32f10x_it.c和stm32f10x_it.h為中斷函式,不過內部只包含9箇中斷函式;
工程的建立
-
新建資料夾——重新命名:test
-
進入test,test內分別建立FWLib,CMSIS,USER,OBJ四個資料夾
-
進入3.5.0韌體庫資料夾,進入到STM32F10x_Stdperiph_Lib_V3.5.0→Libraries→STM32F10x_StdPeriph_Driver,複製inc和src資料夾到test資料夾下的FWLib下;
-
進入3.5.0韌體庫資料夾,進入到STM32F10x_StdPeriph_Lib_V3.5.0→Libraries→CMSIS→CM3→CoreSupport,複製core_cm3.h和core_cm3.c到test資料夾下的CMSIS下;
-
進入3.5.0韌體庫資料夾,進入STM32F10x_StdPeriph_Lib_V3.5.0→Libraries→CMSIS→CM3→DeviceSupport→ST→STM32F10x;複製startup資料夾和Release_Notes,stm32f10x.h和system_stm32f10x.c和system_stm32f10x.h到test資料夾下的CMSIS下
-
開啟3.5.0韌體庫資料夾,進入STM32F10x_StdPeriph_Lib_V3.5.0→Project→STM32F10x_StdPeriph_Template,複製main.c,stm32f10x_conf.h,stm32f10x_it.c,stm32f10x_it.h到test資料夾下的USER資料夾下;
-
開始開啟keil5建立工程,project→NEWproject→選擇器件型別(我這裡預設選擇STM32F103ZET6)→OK→NO;
-
右鍵target1→manang components,在Groups框內新建USER,FWLib,CMSIS,STATUP然後OK,
-
展開target1,雙擊USER,分別雙擊main.c和stm32f10x_it.c加入到USER資料夾;
-
雙擊FWLib,選擇FWLib並將FWLib資料夾下的src資料夾下的所有檔案新增;
-
雙擊CMSIS,選擇CMSIS資料夾,將core_cm3.c和system_stm32f10x.c新增
-
雙擊STARTUP,選CMSIS→startup→arm,將startup_stm32f10x_hd.s新增;
-
配置工程: 晶振=8.0, output→create HEX; C/C++→Optimization→level3(-O3); C/C++→include paths→新建→選中USER,再新建→選中→FWLib→inc,再新建→選中→CMSIS,然後OK 複製USE_STDPERIPH_DRIVER,STM32F10X_HD到C/C++的define內,然後OK。
-
測試:清空main.c 內的全部程式碼,然後編寫如下程式除錯;
#include "stm32f10x.h"
Int main()
{
}
//注意在每個原始檔和標頭檔案的最後要空一行,不然會有警告;
如果編譯通過就沒有問題,可以放心的寫自己的程式碼了;