1. 程式人生 > >如何新建stm32韌體庫工程

如何新建stm32韌體庫工程

1、首先先新建一個工程資料夾,在它之下再新建7個資料夾

DOC用於存放程式說明檔案

Listing存放的是編譯器編譯時候產生的c/彙編/連結的列表清單

Output存放的是編譯產生的除錯資訊、hex檔案、預覽資訊、封裝庫等

Project用來存放工程

CMSIS 和 STM32F4xx_StdPeriph_Driver 用來存放的是韌體庫檔案

USER是使用者編寫的驅動檔案

2、新建工程

開啟 KEIL5,新建一個工程,工程名根據喜好命名。

接下來選擇CPU具體型號,如果這裡沒有出現你想要的 CPU 型號,或者一個型號都沒有,那麼肯定是你的 KEIL5沒 有新增 device 庫, KEIL5 不像 KEIL4 那樣自帶了很多 MCU 的型號,KEIL5 需要自己新增。(這裡以stm32f429晶片為例構建韌體庫工程模板)                                                   

           

等下我們手動新增庫檔案,這裡我們點選關掉。

在新建的工程中新增 5個組資料夾,用來存放各種不同的檔案,檔案從本地建好的工程資料夾下獲取,雙擊組資料夾就會出現新增檔案的路徑,然後選擇檔案即可。

右鍵點選Target1

新建如下幾個組資料夾

STARTUP:存放彙編的啟動檔案:startup_stm32f429_439xx.s

CMSIS: 存放與核心有關的檔案這裡以M4核心為例:system_stm32f4xx.c

STM32F4xx_StdPeriph_Driver:存放STM32外設庫檔案misc.c  stm32f4xx_ppp.c(ppp代表外設名稱)

USER:使用者編寫的檔案: main.c:main函式檔案,暫時為空   stm32f4xx_it.c:跟中斷有關的函式都放這個檔案,暫時為空        DOC: 工程說明.txt:程式說明檔案,用於說明程式的功能和注意事項等

       先把上面提到的檔案從 ST 標準庫中複製到工程模版對應資料夾的目錄下,然後在新建的工程中新增這些檔案,雙擊組資料夾就會出現新增檔案的路徑,然後選擇檔案即可。

STM32F429比較特殊,它有用 FMC外設代替了 FSMC外設的功能,所以它的庫檔案與其它型號的晶片不一樣,在新增外設檔案時,stm32f4xx_fmc.c 和 stm32f4xx_fsmc.c檔案只能存在一個,而且我們的 STM32F429晶片必須用 fmc 檔案。如果我們把外設庫的所有檔案都新增進工程,也可以使用下面的方法,設定檔案不加入編譯,這樣也不會導致編譯問題。這種設定在開發時也很常用,暫時不把檔案加進編譯,方便除錯。

新增完成後,接下來進行設定

這一步的配置工作很重要,很多人串列埠用不了 printf 函式,編譯有問題,下載有問題,都是這個步驟的配置出了錯。 (1) Target 中選中微庫“ Use MicroLib”,為的是在日後編寫串列埠驅動的時候可以使用printf函式。而且有些應用中如果用了 STM32的浮點運算單元 FPU,一定要同時開微庫,不然有時會出現各種奇怪的現象。FPU 的開關選項在微庫配置選項下方的“Use Single Precision”中,預設是開的。

(2) 在 Output 選項卡中把輸出資料夾定位到我們工程目錄下的“output”資料夾,如果想在編譯的過程中生成 hex檔案,那麼那 Create HEX File 選項勾上。

           

  (3) 在 Listing選項卡中把輸出資料夾定位到我們工程目錄下的“Listing”資料夾。

        

(4) 在 C/C++選項卡中新增處理巨集及編譯器編譯的時候查詢的標頭檔案路徑。

  

在這個選項中新增巨集,就相當於我們在檔案中使用“#define”語句定義巨集一樣。在編譯器中新增巨集的好處就是,只要用了這個模版,就不用原始檔中修改程式碼。   STM32F429_439xx 巨集:為了告訴 STM32標準庫,我們使用的晶片是 STM32F429型號,使 STM32標準庫根據我們選定的晶片型號來配置。   USE_STDPERIPH_DRIVER 巨集:為了讓 stm32f4xx.h包含 stm32f4xx_conf.h 這個標頭檔案。

“Include Paths ”這裡新增的是標頭檔案的路徑,如果編譯的時候提示說找不到標頭檔案,一般就是這裡配置出了問題。你把標頭檔案放到了哪個資料夾,就把該資料夾新增到這裡即可。(請使用圖中的方法用檔案瀏覽器去新增路徑,不要直接手打路徑,容易出錯)                                                                                                                                                                                                               編譯即可