天天看點

《嵌入式-STM32開發指南》第一部分 入門篇 - 第5章 STM32建立工程及配置

5.1 建立檔案

5.1.1 建立檔案夾

在 STM32-Template 檔案夾下,我們建立四個檔案夾,分别為DIF、Doc、Listing、Output、User。其中DIF中包含兩個檔案夾CMSIS和Fwilb, CMSIS 用來存放庫為我們自帶的啟動檔案和一些 M3系列的通用檔案。CMSIS檔案裡存放的檔案适合任何M3核心的單片機,CMSIS 的 縮寫為:Cortex Microcontroller Software Interface Standard,是 ARM Cortex 微控制器 軟體接口标準,是 ARM 公司為晶片廠商提供的一套通用的且獨立于晶片廠商 的處理器軟體接口;FWlib 用來存放 STM32 庫裡面的 inc 和 src 這兩個檔案,這兩個檔案包 含了晶片上的所有驅動。Listing 用來存 放一些編譯過程中産生的檔案。Output 用來儲存軟體編譯後輸出的檔案。USER 用來存放工程檔案和使用者代碼,包括主函數main.c。另外,再把檔案名為keilkilll的檔案放到STM32-Template 檔案夾用來清除不必要的檔案。建立檔案夾如下圖所示:

《嵌入式-STM32開發指南》第一部分 入門篇 - 第5章 STM32建立工程及配置

圖 5-1

5.1.2 添加檔案

在3.5.0目錄下

3.5.0\3.5.0\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver 的 inc 跟 src 這兩個檔案夾拷貝到 STM32-Template\DIF\FWlib 檔案夾 中。

《嵌入式-STM32開發指南》第一部分 入門篇 - 第5章 STM32建立工程及配置

圖5-2

3.5.0\3.5.0\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm 的全部檔案拷貝到 STM32-Template\CMSIS\startup(需先在 CMSIS 建立好 startup 檔案夾)檔案夾下。 這些是用彙編寫的啟動檔案。野火 M3 開發闆用的 CPU 是 STM32F103VE,V表示100腳,E = 512K位元組的閃存存儲器;其中 512KFlash,屬于大容量的,是以等下我們把startup_stm32f10x_hd.s添加到我們的工程中。根據 ST 的官方資料:Flash 在 16 ~32 Kbytes 為小容量,64 ~128 Kbytes為 中容量,256 ~512 Kbytes為大容量,不同大小的 Flash 對應的啟動檔案不一 樣,這點要注意。

STM32 各類産品對應的啟動檔案字尾名含義。

《嵌入式-STM32開發指南》第一部分 入門篇 - 第5章 STM32建立工程及配置

圖5-3 CL-VL-XL-LD-MD-HD含義

3.5.0\3.5.0\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport 的 core_cm3.c 和 core_cm3.h 也拷貝到 STM32-Template\CMSIS 檔案夾 下。

3.5.0\3.5.0\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x 的stm32f10x.h、system_stm32f10x.c、system_stm32f10x.h拷貝到STM32-Template\CMSIS 檔案夾下。

《嵌入式-STM32開發指南》第一部分 入門篇 - 第5章 STM32建立工程及配置

圖5-4

3.5.0\3.5.0\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template下的 main.c、stm32f10x_conf.h、 stm32f10x_it.h、 stm32f10x_it.c 、system_stm32f10x.c 拷貝到 STM32-Template\USER 目錄下,再在STM32-Template\USER目錄下建立Libraries和Project ,其中Libraries用來存放庫函數,Project用來存放工程檔案。

《嵌入式-STM32開發指南》第一部分 入門篇 - 第5章 STM32建立工程及配置

圖5-5

5.2建立的MDK 工程

5.2.1建立工程

1、點選桌面 UVision4圖示,啟動軟體,在工具欄 Project->New μVision Project…建立我們的工程檔案,我們将建立的工程檔案儲存在STM32-Template\USER\Project\RVMDK(uv4)檔案夾下(先在Project檔案夾下建立RVMDK(uv4)檔案),檔案名取為STM32-MINI(這款32是MINI闆,是以取名STM32-MINI),名字可以随便取,點選儲存。

《嵌入式-STM32開發指南》第一部分 入門篇 - 第5章 STM32建立工程及配置

圖5-6

2、視窗是讓我們選擇公司跟晶片的型号,我們用的晶片是 ST 公司的STM32F103VE,有64K SRAM,512K Flash,屬于高內建度的晶片。按如下選擇即可。

《嵌入式-STM32開發指南》第一部分 入門篇 - 第5章 STM32建立工程及配置

圖5-7

3、視窗問我們是否需要拷貝 STM32 的啟動代碼到工程檔案中,這份啟 動代碼在 M3 系列中都是适用的,一般情況下我們都點選是,但我們這裡用 的是 ST 的庫,庫檔案裡面也自帶了這一份啟動代碼,是以為了保持庫的完 整性,我們就不需要開發環境為我們自帶的啟動代碼了,稍後我們自己手動添加,這裡我們點選否。

《嵌入式-STM32開發指南》第一部分 入門篇 - 第5章 STM32建立工程及配置

圖5-8

4、将 Target 改為 STM32-MINI(不改也行)在 STM32-DEMO 上右鍵選中 Add Group…選項,建立四個組,分别命名為STARTUP、 FWlib、 CMSIS 、USER。STARTUP 從名字就可以看得出我們是用它來放我們的啟動代碼的,FWlib 用來 存放庫檔案, CMSIS 用來存放 M3 系列單片機通用的檔案,USER 用來存放使用者自定義的應用程式。然後添加相應檔案,修改主函數main後如圖所示:

《嵌入式-STM32開發指南》第一部分 入門篇 - 第5章 STM32建立工程及配置

圖5-9

5.2.2配置 MDK 的配置選項

<1>點選工具欄中的魔術棒按鈕

《嵌入式-STM32開發指南》第一部分 入門篇 - 第5章 STM32建立工程及配置

圖5-10

<2>在彈出來的視窗中選中Output點選 Select Folder for Objects… 設定編譯後輸出檔案儲存的位置(放在STM32-Template\Output檔案夾下)。同時把 Create HEX File 和 Browse information 這兩個選項框也選上。

《嵌入式-STM32開發指南》第一部分 入門篇 - 第5章 STM32建立工程及配置

圖5-11

<3>同樣在 Listing 這個頁籤中,我們也點選 Select Folder listings…定位到模闆中 的 Listing 檔案夾。

<4> 在C/C++頁籤,在 Define 裡面輸入添加 USE_STDPERIPH_DRIVER,STM32F10X_HD。添加 USE_STDPERIPH_DRIVER 是為了屏蔽編譯器的預設搜尋路徑,轉而使用我們添加到工程中的 ST 的庫,添加 STM32F10X_HD 是因為我們用的晶片是大容量的,添加了STM32F10X_HD 這個宏之後,庫檔案裡面為大容量定義的寄存器我們就可以用了。晶片是小或中容量的時候宏要換成STM32F10X_LD 或者 STM32F10X_MD。其實不管是什麼容量的,我們隻要添加上 STM32F10X_HD 這個宏即可,當你用小或者中容量的晶片時,那些為大容量定義的寄存器我不去通路就是了,反正也通路不了,關于這兩個宏的詳細解釋參看後文的小貼士。在 Include Paths 欄點選,在這裡添加庫檔案的搜尋路徑,這樣就可以屏蔽掉預設的搜尋路徑。

《嵌入式-STM32開發指南》第一部分 入門篇 - 第5章 STM32建立工程及配置

圖5-12

《嵌入式-STM32開發指南》第一部分 入門篇 - 第5章 STM32建立工程及配置

圖5-13

5.2.3硬體調試配置

接着以上操作,這個工程預設的是軟體仿真,如果開發闆要用 J-LINK (ST-LINK同理)調試的話,還需要在 開發環境中做如下修改。實際上,我們開發程式的時候 80%都是在硬體上調試的。在 Debug 選項裡

《嵌入式-STM32開發指南》第一部分 入門篇 - 第5章 STM32建立工程及配置

圖5-14

《嵌入式-STM32開發指南》第一部分 入門篇 - 第5章 STM32建立工程及配置

圖5-15

《嵌入式-STM32開發指南》第一部分 入門篇 - 第5章 STM32建立工程及配置

圖5-16

《嵌入式-STM32開發指南》第一部分 入門篇 - 第5章 STM32建立工程及配置

圖5-17

單擊OK,大功告成!

小貼士:

關于STM32 MDK中USE_STDPERIPH_DRIVER, STM32F10X_HD問題的解釋

初學STM32,在MDK 環境中使用STM32固件庫建立工程時,初學者可能會遇到編譯不通過的問題。出現如下警告或錯誤提示:

warning: #223-D: function “assert_param” declared implicitly;assert_param(IS_GPIO_ALL_PERIPH(GPIOx));

這時候我們需要在“Target Options”中的“C/C++”頁籤中如圖5-18所示紅框中添加USE_STDPERIPH_DRIVER、STM32F10X_HD。這樣才能使編順利通過。

《嵌入式-STM32開發指南》第一部分 入門篇 - 第5章 STM32建立工程及配置

圖5-18

知其然了,我們還得知其是以然。下面就筆者給大家一一道來。我們知道,程式的執行是從“main.c”檔案開始的,其中必須包含有頭檔案“stm32f10x.h”。我們打開“stm32f10x.h”,按下“Ctrl+F”鍵,查找USE_STDPERIPH_DRIVER,在“Find What”欄中輸入“USE_STDPERIPH_DRIVER”。值得注意的是在查找之前工程必須是編譯過了的。如圖5-19所示。點選“Find Next”,出現“USE_STDPERIPH_DRIVER”對應的代碼行,我們能在第8296-8298行找到如圖5-20所示代碼段。

《嵌入式-STM32開發指南》第一部分 入門篇 - 第5章 STM32建立工程及配置

圖5-19

《嵌入式-STM32開發指南》第一部分 入門篇 - 第5章 STM32建立工程及配置

圖5-20

這段代碼的意思是,隻有用預編譯指令預定義了“USE_STDPERIPH_DRIVER”,才會将"stm32f10x_conf.h"包含進“stm32f10x.h”中,進而被"main.c"用到。這就解釋了,為什麼我們沒有在“main.c”中包含"stm32f10x_conf.h",而在編譯之後卻被包含進了"main.c"中,出現如圖-5所示的情況。"stm32f10x_conf.h"檔案相當于一個開關檔案,如果要用到STM32固件庫驅動标準外設,則外設驅動頭檔案是必不可少的,如“stm32f10x_gpio.h”。在"stm32f10x_conf.h"中我們通過代碼#include "stm32f10x_gpio.h"來實作這個操作。

說到這兒估計大家已經對“USE_STDPERIPH_DRIVER”的來龍去脈有個清晰的認識了吧?其實單從字面意思了解就是“使用标準外設驅動”,在C/C++預定義中加“USE_STDPERIPH_DRIVER”就是允許“使用标準外設驅動”了。至于加入的“STM32F10X_HD“同樣能在檔案”stm32f10x.h“通過如上所述的方法通過功能查找來進行解釋,其實它也是對于對應硬體的某些定義起開關作用罷了。其實寫在這裡,他的名字叫define。 也就跟你在工程裡面寫define XXX是一樣的。。隻不過寫在這裡的話,是全局的而已。

歡迎通路我的網站:

​​BruceOu的哔哩哔哩​​

​​BruceOu的首頁​​

​​BruceOu的部落格​​

 ​​簡書​​

接收更多精彩文章及資源推送,請訂閱我的微信公衆号:

繼續閱讀