STM32筆記(14):在Keil 5 建立 STM32F10x 函數庫程式開發範本

前面幾篇文章瞭解 STM32CubeMX 如何透過 UI 介面產生 c 語言程式碼、如何使用暫存器控制 STM32 的 GPIO 點亮 LED,以及使用變數及結構來撰寫易讀的程式。從這篇開始要實做使用 SPL(Standard Peripheral Libraries)作為應用程式開發,開發時需先準備一個編譯的環境,將官方提供的標準外圍設備函數庫引用進來當作範本,在撰寫新的專案或程式時,可以套用這個範本。
Photo by Vishnu Mohanan on Unsplash


以下檔案是在建立程式編譯範本時,會用到的重要檔案,說明如下表:
函式庫檔案名稱說明
startup_stm32f10x_md.s啟動文件
core_cm3.c
core_cm3.h
定義 Cortex-M3 CPU 一些相容各個開發環境的核心暫存器操作的函式。
core_cm3.h定義了相容各種編譯器的關於debug和NVIC的一些函式
stm32f10x.h定義了啟動設置,以及所有寄存器的廣域定義。
system_stm32f10x.c
system_stm32f10x.h
功能是設置系統和總線時鐘,最重要的函數是 SystemInit(),
在系統啓動時調用的,用來設置整個系統的時鐘。
stm32f10x_???.c
stm32f10x_???.h
???表示外設名稱,如 gpio、i2c、spi、rtc 等
stm32f10x_conf.h包含了stm2f10x 的外設的頭文件。
stm32f10x_it.c
stm32f10x_it.h
Cortex-M3 工程中所有中斷的函數。

以下就來實做如何在 Keil v5 的開發環境下,使用 STM32F1x 官方標準函數庫來建立編譯環境的範本。

[複製 STM32F1xx 函數庫檔案到相關目錄]

建立程式開發環境,首先先建立幾個要放置官方函數庫的目錄,再將所需的檔案複製進來,然後設定 Keil 環境,就可開始撰寫程式進行編譯,編譯成功後產生執行檔,並下載到開發板安裝執行。

(1) 在檔案總管建立一個新的資料夾,可依個人喜好決定名稱,這裡就以 Template 為例。

(2) 在 Template 資料夾內建立三個子目錄,命名為 CMSIS 、Libraries 及 User。

(3) 在 ST 官網 下載 最新標準函數庫,目前最新的版本是 v3.6.0:

(4) 複製標準函數庫檔案到Template\CMSIS
  • 將 F103C8\STM32F10x_StdPeriph_Lib_V3.6.0\Libraries\CMSIS\CM3\CoreSupport 資料夾內的 core_cm3.c 及 core_cm3.h 兩個檔案,複製至 Template\CMSIS 目錄。

  • 將 F103C8\STM32F10x_StdPeriph_Lib_V3.6.0\Libraries\CMSIS\CM3\DeviceSupport\ST\ STM32F10x\startup\arm 內的 startup_stm32f10x_md.s 檔,複製至 Template\CMSIS 目錄。
    這裡的 .s 檔需要依據 MCU 的型號來決定,以我的開發板為例:STM32F103C8T6,配備 64K 的 FLASH,屬於中容量的微控制器,就選擇 startup_stm32f10x_md.s 這個檔案,如果型號與我的不同,可依照下表 Flash 的大小,判斷該使用哪個 startup 檔案。
Flash大小容量採用檔案
小於 32K小容量startup_stm32f10x_ld.s
介於 64K 至 128K中容量startup_stm32f10x_md.s
介於 256K 至 512K大容量startup_stm32f10x_hd.s
介於 512K 至 1024K超大容量startup_stm32f10x_xl.s
上述目錄的 startup_stm32f10x_cl.s 檔案,表示為互聯型產品(Connectivity line devices),如 stm32f105/107系列,如檔名中有 _vl.s 表示是超值型產品(Value line devices),如 stm32f100 系列。

  • 將 STM32F10x_StdPeriph_Lib_V3.6.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x 內的stm32f10x.h、system_stm32f10x.c 及 system_stm32f10x.h 三個檔案,複製至 Template\CMSIS 目錄。
Template\CMSIS 目錄內共有 6 個檔案,如下圖:
(5) 複製標準函數庫檔案到Template\Libraries
  • 將 STM32F10x_StdPeriph_Lib_V3.6.0\Libraries\STM32F10x_StdPeriph_Driver 下的兩個子目錄 src 及 inc ,複製到 Template\Library 資料夾內。
(6) 複製標準函數庫檔案到Template\User
  • 將 STM32F10x_StdPeriph_Lib_V3.6.0\Project\STM32F10x_StdPeriph_Template 目錄內的三個檔案(如下圖紅色框),複製到 Template\User 目錄內。
  • 新增 main.c 到 Template\User 目錄內,開啟記事本或文字編輯器,輸入以下內容後存檔在 User 目錄,名為 main.c 。
/**********************************************************
 * 名稱:main.c
 * 日期:2022/3/17  
 * 描述:
 **********************************************************/

#include "stm32f10x.h"
int main()
{
   while (1) {
    
   }
}

註:在 Keil MDK5 的編譯環境,在程式的最後要多空一列,不然編譯會出現:「main.c(15): warning: #1-D: last line of file ends without a newline。」的 Warrning 警告。

[在 Keil 新增專案及路徑設定]

準備好標準函示庫後,接著新增一個專案,之後再進行路徑及新增檔案設定。開啟 Keil 主程式,功能表點選「Project」→「New uVision Project」,在稍早建立的 User 目錄下,建立一個名為 Program 的新專案,如下圖:

接著選擇開發版的型號:

按下  OK   後,出現以下視窗,可按X關閉視窗或按  OK  離開。

[在 Keil 設定 Include 檔案路徑]

在左方樹狀目錄的 Target 按右鍵,出現選單視窗,選擇「Optios for Target...」或上方工具列的魔法棒(如下圖紅色框處),開啟選項設定視窗,如下圖:

點選「Target」頁簽,勾選「Use MicroLIB」,並將 ARM 預設 Compiler 版本改成 Version 5。

點選「Output」頁簽,按下「Seclect Folder for Objects」選擇目錄為 User\Objects,並勾選「Create HEX File」。


點選「C/C++」頁簽,在「Define:」欄位輸入「USE_STDPERIPH_DRIVER,STM32F10X_MD」,並按下在「Include Paths」右邊的開啟目錄按鈕(如下圖紅框處):

出現如以下的空白視窗,需點選右方的增加路徑圖示,將 Template 目錄下的三個子目錄 CMSIS、Libraries\inc 及 User 的路徑加進來,如下圖:

[在 Group 中增加檔案]

在左方樹狀目錄的 Target 按右鍵,出現選單視窗,選擇「Manage Project Items...」或上方工具列的方塊圖示(如下圖紅色框處)。

如下圖中央的 Groups 增加三個 Group:User、CMSIS 及 Libraries 需要添加的 c 語言程式及 .s 啟動檔。

在 Libraries Group 按下「Add Files...」的按鍵開啟選擇檔案視窗,選擇 Libraries\src 內所有的檔案,可以按 Ctrl   +  A  來全選檔案,再按下「Add」,將所有 .c 檔案加進 Group 目錄內。

到這裡已經完成範本的製作,可對 main.c 進行編譯,如果出現編譯結果為「 0 Error(s), 0 Warning(s).」表示已經成功建立範本。

[參考資料]


1 留言

  1. 想請問作者有沒有出現在 Group 中增加檔案無法加入header file 的問題?

    回覆刪除

張貼留言

較新的 較舊