操作系統:win10
1.文件目錄
(在cmd下用"cd 文件夾" 進入到要顯示的文件夾,如cd d:\en.stsw-stm32054,然后輸入tree 回車就會出現上圖的目錄結構)
Libraries 文件夾下面有CMSIS和STM32F10x_StdPeriph_Driver兩個目錄, 其 中CMSIS目錄下面是啟動文件,STM32F10x_StdPeriph_Driver放的是STM32固件庫源碼文件。源文件目錄下面的inc目錄存放的是stm32f10x_xxx.h頭文件,無需改動。src目錄下面放的是stm32f10x_xxx.c格式的固件庫源 碼文件。每一個.c 文件和一個相應的.h 文件對應。這里的文件也是固件庫的核心文件,每個外設對應一組文件。
Project 文件夾下面有兩個文件夾。顧名思義, STM32F10x_StdPeriph_Examples 文件夾下面存放的 ST 官方提供的固件實例源碼,在以后的開發過程中,可以參考修改這個官方提供的實例來快速驅動自己的外設,很多開發板的實例都參考了官方提供的例程源碼,這些源碼對以后的學習非常重要。 STM32F10x_StdPeriph_Template 文件夾下面存放的是工程模板。
Utilities 文件下就是官方評估板的一些對應源碼,這個可以忽略不看。根目錄中還有一個 stm32f10x_stdperiph_lib_um.chm 文件,直接打開可以知道,這是一個固件庫的幫助文檔,這個文檔非常有用,只可惜是英文的,在開發過程中,這個文檔會經常被使用到。
2.文件介紹
先看下圖這個文件夾下的文件
有兩個文件
這兩個文件是是 CMSIS 核心文件,由ARM公司提供。對於使用STM32做開發的人來說永遠不需要用這個文件。
再看下圖這個文件夾
有一個文件夾(startup)一個html文件以及三個文件
其中system_stm32f10x.c 和對應的頭文件 system_stm32f10x.h 文件的功能是設置系統以及總線時鍾,這個里面有一個非常重要的 SystemInit()函數,這個函數在我們系統啟動的時候都會調用,用來設置系統的整個時鍾系統。
stm32f10x.h 這個文件就相當重要了,只要你做 STM32 開發,你幾乎時刻都要查看這個文件相關的定義。這個文件打開可以看到,里面非常多的結構體以及宏定義。 這個文件里面主要是系統寄存器定義申明以及包裝內存操作。
接下來再看startup文件夾,這個文件夾里面放的文件顧名思義是啟動文件 ,里面有四個文件夾:
arm文件下的文件
這里之所以有 8 個啟動文件,是因為對於不同容量的芯片啟動文件不一樣。對於 103 系列,主要是用其中 3 個啟動文件:
3.新建基於固件庫的 MDK5 工程模板
1) 建立一個裝所有工程的文件夾。在建立工程之前,建議用戶在電腦的某個目錄下面建立一個文件夾,后面所建立的工程都可以放在這個文件夾下面,這里我建立一個文件夾為STM32Project。
說明:工作中用到的所有項目的工程我都放在Project文件夾里,比如上圖中的JavaProject是做java項目的,AltiumDesignerProject是畫PCB板的,同樣,STM32Project文件夾是專門用來存放與STM32開發的工程文件夾,所有的STM32工程都放在這個文件夾下(包括接下來要建的Template工程,Template工程是一個工程模板,以后建新工程可以直接在此基礎上做而不用從頭開始)
2)正式開始建立工程模板,在剛剛新建的STM32Project文件夾下新建一個文件夾名為Template,該文件夾用於存放工程模板,Template文件夾下新建USER文件夾。
點擊 MDK 的菜單: Project –>New Uvision Project ,然后將目錄定位到剛才建立的Template之下的USER文件夾,工程命名為Template,點擊保存。
選擇芯片型號
我用的是STM32F103ZET6所以選擇如下:
點擊OK后會顯示如下對話框(Manage Run-Time Environment):
在這個界面,我們可以添加自己需要的組件,從而方便構建開發環境, 由於我暫時不需要,所以直接點擊Cancel。
然后就出現如下界面:
對應的USER文件下的文件如下:
Listings 和 Objects文件夾是 MDK 自動生成的文件夾,用於存放編譯過程產生的中間文件。這里,我們把兩個文件夾刪除,我們會在下一步驟中新建一個 OBJ 文件夾,用來存放編譯中間文件。
3)構建文件目錄
在Template文件夾下新建3個文件夾CORE,OBJ以及STM32F10x_FWLib如下:
CORE 用來存放核心文件和啟動文件
OBJ 是用來存放編譯過程文件以及 hex 文件
STM32F10x_FWLib 文件夾顧名思義用來存放 ST 官方提供的庫函數源碼文件。
USER 目錄下除了用來放工程文件外,還用來存放主函數文件main.c以及其他文件包括 system_stm32f10x.c
4)添加固件庫文件,執行如下復制操作
src 存放的是固件庫的.c 文件, inc 存放的是對應的.h 文件
5)添加啟動文件
執行如下復制操作
然后再執行如下操作,復制startup_stm32f10x_hd.s到CORE文件夾下:
STM32F103ZET6 是大容量芯片,所以選擇startup_stm32f10x_hd.s。
現在CORE文件下下共有三個文件:
6)執行如下復制操作
7)執行如下復制操作
8)經過前面的這些步驟就把需要用到的固件庫文件復制到工程目錄下了
接下來把這些文件添加到工程中:
右擊Target1選擇Mange Project Items
9)在彈出的對話框中執行如下操作:
現在工程變成這樣了:
10)下面開始添加文件到工程中
右鍵Temlate選擇Mange Project Items
執行如下操作
定位到我們剛才建立的目錄STM32F10x_FWLib/src下面,把所有文件添加進去
添加之后如下:
這里需要說明一下,對於我們寫代碼,如果我們只用到了其中的某個外設,我們就可以不用添加沒有用到的外設的庫文件。例如我只用 GPIO,我可以只用添加 stm32f10x_gpio.c 而其他的可以不用添加。這里我們全部添加進來是為了后面方便,不用每次添加,當然這樣的壞處是工程太大,編譯起來速度慢,用戶可以自行選擇。
用同樣的方法,選擇CORE添加如下文件:
用同樣的方法,選擇USER添加如下文件
點擊OK回到主界面
11)接下來編譯工程
選擇魔術棒工具設置編譯中間文件目錄位OBJ
現在編譯還不行會出錯,如下:
大多是提示找不到.h文件
下面我們要告訴 MDK,在哪些路徑之下搜索需要的頭文件,也就是頭文件目錄。
點擊魔術棒工具執行如下操作
然后執行下面的操作添加目錄:
需要添加的有三個目錄,添加之后的樣子:
OK之后,在Define里添加:STM32F10X_HD,USE_STDPERIPH_DRIVER
如果你用的是中容量那么 STM32F10X_HD 修改為 STM32F10X_MD,小容量修改為 STM32F10X_LD然后點擊 OK。
然后雙擊打開main.c文件,刪掉自帶代碼添加如下:
#include "stm32f10x.h" void Delay(u32 count) { u32 i=0; for(;i<count;i++); } int main(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB| RCC_APB2Periph_GPIOE, ENABLE); //使能 PB,PE 端口時鍾 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //LED0-->PB.5 端口配置 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽輸出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO 口速度為 50MHz GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化 GPIOB.5 GPIO_SetBits(GPIOB,GPIO_Pin_5); //PB.5 輸出高 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //LED1-->PE.5 推挽輸出 GPIO_Init(GPIOE, &GPIO_InitStructure); //初始化 GPIO GPIO_SetBits(GPIOE,GPIO_Pin_5); //PE.5 輸出高 while(1) { GPIO_ResetBits(GPIOB,GPIO_Pin_5); GPIO_SetBits(GPIOE,GPIO_Pin_5); Delay(3000000); GPIO_SetBits(GPIOB,GPIO_Pin_5); GPIO_ResetBits(GPIOE,GPIO_Pin_5); Delay(3000000); } }
編譯:
先點第一個再點第二個
4.說明
以上內容絕大多數來自正點原子開發板的配套教程,寫在這並不是想借別人的東西唬人,而是為了自己一步一步走一遍更熟悉這個過程。同時由於原版教程是xp下而我用的是win10怕有不兼容的地方故記錄下。原文可去正點原子論壇下載,他們開源。
正點原子論壇:http://www.openedv.com/