天天看點

STM32—建立工程模闆前言基于固件庫搭建工程模闆步驟

文章目錄

  • 前言
  • 基于固件庫搭建工程模闆步驟
    • 1. 建立工程檔案
    • 2. 建立代碼工程目錄
    • 3. 選擇晶片型号
    • 4. 建立CORE,OBJ,STM32F10x_FWLib檔案夾
    • 5. 拷貝固件庫源碼檔案到 STM32F10x_FWLib 檔案夾下
    • 6. 拷貝固件庫包啟動檔案到 CORE 下
    • 7. 拷貝固件庫檔案到USER目錄下
    • 8. 将上述檔案加入到工程
    • 9. 嘗試編譯工程
    • 10. 添加頭檔案路徑
    • 11. 宏定義選擇外設
    • 12. hex檔案生成
    • 13. SYSTEM 檔案夾

前言

環境搭建這裡就不介紹了,包括MDK軟體(keil)的安裝(以及安裝對應的器件 pack),序列槽驅動(CH340),ST-LINK驅動等。

在STM32的開發過程中,我們知道有兩種方式,庫函數和寄存器。

在實際開發中我們可以直接操作寄存器,但是這種方法的劣勢是你需要去掌握每個寄存器的用法,你才能正确使用STM32,而對于 STM32 這種級别的 MCU, 數百個寄存器記起來談何容易。于是 ST(意法半導體)推出了官方固件庫,固件庫将這些寄存器底層操作都封裝起來,提供一整套接口(API)供開發者調用,大多數場合下,你不需要去知道操作的是哪個寄存器,你隻需要知道調用哪些函數即可。一句話概括:固件庫就是函數的集合,固件庫函數的作用是向下負責與寄存器直接打交道,向上提供使用者函數調用的接口(API)。

說明:本文是基于正點原子官方機構提供的資料進行總結的,僅用于個人STM32的學習。

基于固件庫搭建工程模闆步驟

1. 建立工程檔案

在建立工程之前,我們在某個目錄下面建立一個檔案夾,後面所建立的工程都可以放在這個檔案夾下面,這裡我們建立一個檔案夾為“基于固件庫模闆”。在後面的實際開發中,我們可以将其命名為“LED工程”、“紅外實驗”、“智能家居工程”等。

注意:工程名可以為中文,但是其上級目錄(包括上上級、上上上級等)不能有中文,否則會出現編譯錯誤! 當然,為了保險起見,你也可以将所有目錄為英文。

STM32—建立工程模闆前言基于固件庫搭建工程模闆步驟

2. 建立代碼工程目錄

點選 MDK 的菜單: Project –>New Uvision Project ,然後将目錄定位到剛才建立的檔案夾

“基于固件庫模闆”之下,在這個目錄下面建立子檔案夾 USER(我們的代碼工程檔案都是放在 USER

目錄,很多人喜歡建立“Project”目錄放在下面,這也是可以的,這個就看個人喜好了),然後定位到 USER 目錄下面,我們的工程檔案就都儲存到 USER 檔案夾下面。工程命名為Template,點選儲存。

STM32—建立工程模闆前言基于固件庫搭建工程模闆步驟
STM32—建立工程模闆前言基于固件庫搭建工程模闆步驟

3. 選擇晶片型号

這裡我們所使用的 STM32 型号為 STM32F103ZET6,是以這裡選擇STMicroelectronics→STM32F1 Series→STM32F103→STM32F103ZET6(如果使用的是其他系列的晶片,選擇相應的型号就可以了,特别注意: 一定要安裝對應的器件 pack 才會顯示這些内容哦!

STM32—建立工程模闆前言基于固件庫搭建工程模闆步驟

點選OK後,彈出 Manage Run-Time Environment 對話框,直接cancel即可。

現在USER 目錄下面包含 2 個檔案夾和 2 個檔案

STM32—建立工程模闆前言基于固件庫搭建工程模闆步驟

這裡我們說明一下, Template.uvprojx 是工程檔案,非常關鍵,不能輕易删除。 Listings 和 Objects

檔案夾是 MDK 自動生成的檔案夾,用于存放編譯過程産生的中間檔案。這裡,我們把兩個文

件夾删除,我們會在下一步驟中建立一個 OBJ 檔案夾,用來存放編譯中間檔案。 當然,我們不

删除這兩個檔案夾也是沒有關系的,隻是我們不用它而已。

4. 建立CORE,OBJ,STM32F10x_FWLib檔案夾

接下來,在“基于固件庫模闆”目錄下,建立3個檔案夾CORE, OBJ 以及STM32F10x_FWLib。 CORE 用來存放核心檔案和啟動檔案, OBJ 是用來存放編譯過程檔案以及 hex 檔案, STM32F10x_FWLib 檔案夾顧名思義用來存放 ST 官方提供的庫函數源碼檔案。已有的 USER 目錄除了用來放工程檔案外,還用來存放主函數檔案 main.c,以及其他包括 system_stm32f10x.c 等等。

STM32—建立工程模闆前言基于固件庫搭建工程模闆步驟

5. 拷貝固件庫源碼檔案到 STM32F10x_FWLib 檔案夾下

将官方的固件庫包裡的源碼檔案複制到我們的工程目錄檔案夾下面。打開官方固件庫包,定位到我們之前準備好的固件庫包的目STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver 下面,将目錄下面的 src,inc 檔案夾 copy 到我們剛才建立的 STM32F10x_FWLib 檔案夾下面。src 存放的是固件庫的.c 檔案,inc 存放的是對應的.h 檔案,打開這兩個檔案目錄過目一下裡面的檔案,每個外設對應一個.c 檔案和一個.h 頭檔案。

STM32—建立工程模闆前言基于固件庫搭建工程模闆步驟
STM32—建立工程模闆前言基于固件庫搭建工程模闆步驟

6. 拷貝固件庫包啟動檔案到 CORE 下

打開官方固件庫包,定位到目錄STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport 下面,将檔案 core_cm3.c和 文 件 core_cm3.h 複 制 到 CORE下面去 。然 後 定 位 到 目 錄

STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\a

rm 下面,将裡面 startup_stm32f10x_hd.s 檔案複制到 CORE 下面。這裡不同容量的晶片使用不同的啟動檔案,我們的晶片 STM32F103ZET6 是大容量晶片。

STM32—建立工程模闆前言基于固件庫搭建工程模闆步驟

7. 拷貝固件庫檔案到USER目錄下

固件庫STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x 下面

将裡面的三個檔案 stm32f10x.h, system_stm32f10x.c, system_stm32f10x.h,複制到我們的 USER

目錄之下。然後将STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template 下面的 4 個文 件main.c, stm32f10x_conf.h, stm32f10x_it.c, stm32f10x_it.h 複制到 USER 目錄下面。

STM32—建立工程模闆前言基于固件庫搭建工程模闆步驟

至此,我們已經将需要的固件庫相關檔案複制到了我們的工程目錄下面,下面我們将這些檔案加入我們的工程中去。

8. 将上述檔案加入到工程

點選下面這個圖示:

STM32—建立工程模闆前言基于固件庫搭建工程模闆步驟

然後:Project Targets 一欄,我們将 Target 名字修改為 Template,然後在 Groups 一欄删掉一個 Source

Group1,建立三個 Groups: USER,CORE,FWLIB。然後點選 OK,可以看到我們的 Target名字以及 Groups 情況。

STM32—建立工程模闆前言基于固件庫搭建工程模闆步驟
STM32—建立工程模闆前言基于固件庫搭建工程模闆步驟

下面我們往上述檔案夾中添加檔案。和剛才相同的方法,點選那個品子型圖示。然後選擇需要添加檔案的 Group,這裡第一步我們選擇 FWLIB , 然 後 點 擊 右 邊 的 Add Files, 定 位 到 我 們 剛 才 建 立 的 目 錄STM32F10x_FWLib/src 下面,将裡面所有的檔案選中(Ctrl+A),然後點選 Add,然後 Close。可以看到 Files 清單下面包含我們添加的檔案。

(這裡需要說明一下,對于我們寫代碼,如果我們隻用到了其中的某個外設,我們就可以不

用添加沒有用到的外設的庫檔案。例如我隻用 GPIO,我可以隻用添加 stm32f10x_gpio.c 而

其他的可以不用添加。這裡我們全部添加進來是為了後面友善,不用每次添加,當然這樣

的壞處是工程太大,編譯起來速度慢,使用者可以自行選擇。)

STM32—建立工程模闆前言基于固件庫搭建工程模闆步驟

用同樣的方法,将 Groups 定位到 CORE 和 USER 下面, 添加需要的檔案。這裡我們的 CORE 下面需要添加的檔案為 core_cm3.c, startup_stm32f10x_hd.s (注意,預設添加的時候檔案類型為.c,也就是添加 startup_stm32f10x_hd.s 啟動檔案的時候,你需要選擇檔案類型為 All files 才能看得到這個檔案), USER 目錄下面需要添加的檔案為 main.c, stm32f10x_it.c,system_stm32f10x.c。

STM32—建立工程模闆前言基于固件庫搭建工程模闆步驟
STM32—建立工程模闆前言基于固件庫搭建工程模闆步驟

這樣我們需要添加的檔案已經添加到我們的工程中了,最後點選 OK, 回到工程主界面。

STM32—建立工程模闆前言基于固件庫搭建工程模闆步驟

9. 嘗試編譯工程

在編譯之前我們首先要選擇編譯中間檔案編譯後存放目錄。方法是點選魔術棒,然後選擇“Output”選項下面的“Select folder for objects…” ,然後選擇目錄為我們上面建立的 OBJ 目錄。 這裡大家注意,如果我們不設定 Output 路徑,那麼預設的編譯中間檔案存放目錄就是 MDK 自動生成的 Objects 目錄和 Listings 目錄。

STM32—建立工程模闆前言基于固件庫搭建工程模闆步驟

進行編譯:

STM32—建立工程模闆前言基于固件庫搭建工程模闆步驟

發現很多報錯,因為找不到頭檔案。

10. 添加頭檔案路徑

下面我們要告訴 MDK,在哪些路徑之下搜尋需要的頭檔案,也就是頭檔案目錄。 這裡大家要注意,對于任何一個工程,我們都需要把工程中引用到的所有頭檔案的路徑都包含到進來。 回到工程主菜單,點選魔術棒 ,出來一個菜單,然後點選 c/c++選項.然後點選Include Paths 右邊的按鈕。彈出一個添加 path 的對話框,然後我們将圖上面的 3 個目錄添加進去。記住, keil 隻會在一級目錄查找,是以如果你的目錄下面還有子目錄,記得 path一定要定位到最後一級子目錄。然後點選 OK。

STM32—建立工程模闆前言基于固件庫搭建工程模闆步驟
STM32—建立工程模闆前言基于固件庫搭建工程模闆步驟
STM32—建立工程模闆前言基于固件庫搭建工程模闆步驟

11. 宏定義選擇外設

我們再來編譯工程,可以看到又報了很多同樣的錯誤。

STM32—建立工程模闆前言基于固件庫搭建工程模闆步驟

為什麼呢?這是因為 3.5 版本的庫函數在配置和選擇外設的時候通過宏定義來選擇的,是以我們需要配置一個全局的宏定義變量。點選魔術棒,定位到 c/c++界面,然後填寫

“STM32F10X_HD,USE_STDPERIPH_DRIVER”到 Define 輸入框裡面。這裡解釋一下,如果你用的是中容量那麼 STM32F10X_HD 修改為 STM32F10X_MD,小容量修改為 STM32F10X_LD. 然後點選 OK。

STM32—建立工程模闆前言基于固件庫搭建工程模闆步驟

12. hex檔案生成

此時,工程模闆就基本配置好了,編寫main()函數覆寫原來的,是可以編譯通過的。這樣一個工程模版建立完畢。下面還需要配置,讓編譯之後能夠生成 hex 檔案。同樣點選魔術棒,進入配置菜單,選擇 Output。然後勾上下三個選項。 其中 Create HEX file 是編譯生成 hex 檔案, Browser Information 是可以檢視變量和函數定義。

STM32—建立工程模闆前言基于固件庫搭建工程模闆步驟

重新編譯代碼,會生成hex 檔案在 OBJ 目錄下面,這個檔案我們用 flymcu 下載下傳到 mcu 即可運作。 到這裡,一個基于固件庫 V3.5 的工程模闆就建立了。

13. SYSTEM 檔案夾

在正點原子 ALIENTEK 提供的實驗中,每個實驗都有一個 SYSTEM 檔案夾,下面有 3 個子目錄分别為 sys,usart,delay,存放的是每個實驗都要使用到的共用代碼。

首先,找到我們實驗CD光牒,打開任何一個固件庫的實驗,可以看到下面有一個 SYSTEM 檔案夾,進入 SYSTEM 檔案夾,裡面有三個子檔案夾分别為delay,sys,usart,每個子檔案夾下面都有相應的.c 檔案和.h 檔案。 我們接下來要将這三個目錄下面的代碼加入到我們工程中去。

STM32—建立工程模闆前言基于固件庫搭建工程模闆步驟

同樣,我們需要将以上三個源檔案的頭檔案路徑告訴MDK,也就是添加頭檔案路徑

STM32—建立工程模闆前言基于固件庫搭建工程模闆步驟

注意:寫代碼時,記得在代碼的最後面加上一個回車,否則會有警告

繼續閱讀