從零開始學習STM32(一)—— 新建工程模板
- 前言
- 準備作業
- 軟體下載
- 必要檔案下載
- 新建工程
- 結語
前言
從零開始學習STM32系列將由淺入深,和大家一起走進STM32的世界,
本系列的學習是基于正點原子的 ALIENTEK MiniSTM32 V3.0 開發板,miniSTM32開發板已經具備了大多數常用的功能,引腳數量始終,很適合初學者學習,
本篇作為該系列的第一章,將向大家介紹如何新建一個工程模板,工程模板建立的步驟較為反復,少了任何一個步驟都有可能導致打量編譯錯誤,還請大家仔細認真的閱讀,
準備作業
軟體下載
STM32的開發軟體為 Keil uvision5 MDK(以下將簡稱MDK5)
Keil uvision5 MDK 軟體安裝及教程
提取碼:tnrj
必要檔案下載
在 MDK5 安裝完成后,要讓 MDK5 支持 STM32F103 的開發,我們還需要安裝 STM32F1的器件支持包:Keil.STM32F1xx_DFP.2.2.0.pack(STM32F1 的器件包)
提取碼:okoj
還有建立工程時要用的檔案:
STM32F10x_StdPeriph_Lib_V3.5.0
提取碼:ytel
因為 ALIENTEK MiniSTM32 開發板所使用的 STM32 型號為STM32F103RCT6,所以在這里我們選擇 STMicroelectronics→STM32F1Series→STM32F103→STM32F103RCT6(如果使用的是其他系列的芯片,選擇相應的型號就可以了,特別注意:一定要安裝對應的器件 pack 才會顯
示這些內容哦!!,如果沒得選擇,請關閉 MDK,然后安裝STM32F1的器件支持包)
新建工程
準備就緒后我們就可以開始建立工程啦!
1.新建一個工程檔案夾,并在該檔案夾中新建一個子檔案夾(名字自己愛取啥就取啥,父檔案夾我命名為first class,子檔案夾為USER)

2.打開選單欄中的專案

3. 選擇新uVision專案

4.選擇我們新建的子檔案夾,保存工程
5.接著會彈出視窗

mini板用的是STM32F103RTC6芯片,所以選擇SYMicroelectronics——STM32F1 Series——STM32F103——STM32F103RC,然后點擊OK,

緊接著會彈出下面的串口,取消或×掉就好了

6.到了這一步,框架算是搭好了,接下來就是加入各種檔案讓他能夠正常運行,首先,在父檔案夾first class中再新建幾個檔案(名字任取,自己清楚就好了),

7.打開檔案夾STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver,將其中的檔案inc和src復制到first class\STM32f10x_FWLIB檔案夾中,


7.打開檔案夾STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport中的兩個檔案復制到first class\CORE檔案夾中,


8.打開檔案夾STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\STSTM32f10x\startup\arm檔案夾中的startup_stm32f10x_hd檔案復制到first class\CORE檔案夾中,


9.打開檔案夾STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\STSTM32f10x,將stm32f10x、system_stm32f10x、system_stm32f10x檔案復制到first class\USER檔案夾中,


10.打開檔案夾STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template,將圖中的四個檔案復制到first class\USER檔案夾中


11.右擊Target,選擇Manage Project Items,更改或添加相關檔案


12.接著我們將相關檔案添加到相應的組中,圖示為FWLIB組添加檔案的步驟,
打開檔案夾first class\STM32f10x_FWLIB\src,將其中的所有檔案添加到FWLIB組中


下圖展示的是將first class\USER檔案夾中的三個.c檔案添加到USER組中

CORE組檔案的添加有些不同,打開first class\CORE檔案夾,先將檔案型別改為All files,再將箭頭所指的兩個檔案添加到CORE組中,

13.因為在編譯時會產生大量檔案,所以我們要進行一些設定,
如圖,點擊魔術棒,

點擊Output選項,將圖示的三個選項全部勾選,特別注意,不勾選Create HEX File選項將無法生成hex檔案,

點擊Select Folder For Objects可以更改編譯時產生的檔案的存盤位置,(我選的時first class\OBJ檔案夾)


14.再次點開魔術棒,點擊選項C/C++,選擇Include Paths,將所需檔案添加到該選項中

所需添加的檔案有


原子哥還為我們提供了幾個常用的函式,我們也可以按照這個步驟把它添加到工程里:SYSTEM
提取碼:mjoq
添好之后是這樣的

特別注意,如果少了第十四步,程式將無法編譯成功,并且,我們以后撰寫的頭檔案也要添加到這里,還有就是,只能添加最后一級的子檔案夾
例如,first class\STM32f10x_FWLIB檔案是無法直接添加的,first class\STM32f10x_FWLIB\inc可添加成功,
15.再次點開魔術棒,點擊選項C/C++,在Define框中添加宏定義"STM32F10X_HD,USE_STDPERIPH_DRIVER",點擊OK就可以了,

特別注意,宏定義寫錯將導致編譯失敗,還有,每次添加完檔案或修改引數都要點擊確認,否則,資料不會更改,
16.做到這一步,編譯時任會有一個錯誤,那是因為主函式已經撰寫好了,但是不是我們想要的程式,里面運用到了我們沒有的頭檔案,全部洗掉,重新寫一個程式就好了,

測驗代碼
#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_GPIOA|RCC_APB2Periph_GPIOD, ENABLE); //使能PA,PD埠時鐘
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //LED0-->PA.8 埠配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽輸出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度為50MHz
GPIO_Init(GPIOA, &GPIO_InitStructure); //根據設定引數初始化GPIOA.8
GPIO_SetBits(GPIOA,GPIO_Pin_8); //PA.8 輸出高
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //LED1-->PD.2 埠配置, 推挽輸出
GPIO_Init(GPIOD, &GPIO_InitStructure); //推挽輸出 ,IO口速度為50MHz
GPIO_SetBits(GPIOD,GPIO_Pin_2); //PD.2 輸出高
while(1)
{
GPIO_ResetBits(GPIOA,GPIO_Pin_8);
GPIO_SetBits(GPIOD,GPIO_Pin_2);
Delay(5000000);
GPIO_SetBits(GPIOA,GPIO_Pin_8);
GPIO_ResetBits(GPIOD,GPIO_Pin_2);
Delay(5000000);
}
}
點擊編譯

至此,新建工程的所有步驟全部完成,分享一個技巧,以后要撰寫工程直接復制這個模板就好了,
結語
新建工程專案步驟繁瑣,還希望大家認真仔細,因為少了任何一個步驟都有可能導致工程建立失敗,找到哪里出錯可能要花很多時間,這時我踩過的大坑啊!!!!祝大家一次就成功!!!!
這是我在CSDN上發布的第一篇文章,有什么不足的地方還請大家斧正,
最后,希望大家點贊,收藏加關注!!!!
多謝大家的支持!!!!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/280553.html
標籤:其他
