嵌入式 入門篇 - 第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 文件夾用來清除沒必要要的文件。新建文件夾以下圖所示: 函數

這裏寫圖片描述

 

圖 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 文件夾 中。 工具

這裏寫圖片描述

 

圖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 各種產品對應的啓動文件後綴名含義。 3d

這裏寫圖片描述

 

圖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 文件夾下。 調試

這裏寫圖片描述

 

圖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用來存放工程文件。 orm

這裏寫圖片描述

 

圖5-5

 

5.2新建的MDK 工程

5.2.1新建工程

一、點擊桌面 UVision4圖標,啓動軟件,在工具欄 Project->New μVision Project…新建咱們的工程文件,咱們將新建的工程文件保存在STM32-Template\USER\Project\RVMDK(uv4)文件夾下(先在Project文件夾下創建RVMDK(uv4)文件),文件名取爲STM32-MINI(這款32是MINI板,因此取名STM32-MINI),名字能夠隨便取,點擊保存。 blog

這裏寫圖片描述

 

圖5-6


二、窗口是讓咱們選擇公司跟芯片的型號,咱們用的芯片是 ST 公司的STM32F103VE,有64K SRAM,512K Flash,屬於高集成度的芯片。按以下選擇便可。 接口

這裏寫圖片描述

 

圖5-7


三、窗口問咱們是否須要拷貝 STM32 的啓動代碼到工程文件中,這份啓 動代碼在 M3 系列中都是適用的,通常狀況下咱們都點擊是,但咱們這裏用 的是 ST 的庫,庫文件裏面也自帶了這一份啓動代碼,因此爲了保持庫的完 整性,咱們就不須要開發環境爲咱們自帶的啓動代碼了,稍後咱們本身手動添加,這裏咱們點擊否。 圖片

這裏寫圖片描述

 

圖5-8


四、將 Target 改成 STM32-MINI(不改也行)在 STM32-DEMO 上右鍵選中 Add Group…選項,新建四個組,分別命名爲STARTUP、 FWlib、 CMSIS 、USER。STARTUP 從名字就能夠看得出咱們是用它來放咱們的啓動代碼的,FWlib 用來 存放庫文件, CMSIS 用來存放 M3 系列單片機通用的文件,USER 用來存放用戶自定義的應用程序。而後添加相應文件,修改主函數main後如圖所示: 
這裏寫圖片描述ip

圖5-9

 

5.2.2配置 MDK 的配置選項

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

這裏寫圖片描述

 

圖5-10


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

這裏寫圖片描述

 

圖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 欄點擊,在這裏添加庫文件的搜索路徑,這樣就能夠屏蔽掉默認的搜索路徑。 

這裏寫圖片描述

 

圖5-12

 

這裏寫圖片描述

 

圖5-13

 

5.2.3硬件調試配置

接着以上操做,這個工程默認的是軟件仿真,若是開發板要用 J-LINK (ST-LINK同理)調試的話,還須要在 開發環境中作以下修改。實際上,咱們開發程序的時候 80%都是在硬件上調試的。在 Debug 選項裏 

這裏寫圖片描述

 

圖5-14

這裏寫圖片描述

圖5-15

這裏寫圖片描述

圖5-16

這裏寫圖片描述

圖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。這樣才能使編順利經過。 

這裏寫圖片描述

 

圖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所示代碼段。 

這裏寫圖片描述

 

圖5-19

 

這裏寫圖片描述

 

圖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是同樣的。。只不過寫在這裏的話,是全局的而已。

參考資料:http://www.makeru.com.cn/

相關文章
相關標籤/搜索