本文重點(diǎn)介紹基于Keil5 MDK實(shí)現(xiàn)新建一個(gè)完整的工程,第一次新建比較繁瑣,建好后續(xù)工程可以直接復(fù)用
一、新建工程框架
1.新建一個(gè)文件夾,命名為Template
2.點(diǎn)擊 MDK 的菜單: Project –>New Uvision Project ,然后將目錄定位到剛才建立的文件夾
Template 之下,在這個(gè)目錄下面建立子文件夾 USER( 我們的代碼工程文件都是放在 USER
目錄)工程命名為 Template,點(diǎn)擊保存。
3.選擇芯片型號(hào)(一定要安裝對(duì)應(yīng)的器件 pack 才會(huì)顯示這些內(nèi)容哦?。?br>
點(diǎn)擊 OK,如若出現(xiàn)其他界面,點(diǎn)擊取消即可;MDK 會(huì)彈出 Manage Run-Time Environment 對(duì)話框,這里我們不做介紹,點(diǎn)擊Cancel即可
得到如下界面,這里我們只做了一個(gè)框架,還需要添加啟動(dòng)代碼,以及.c 文件等
此時(shí)USER文件夾會(huì)是如下圖情況(Template.uvprojx 是工程文件,非常關(guān)鍵,不能輕易刪除。Listings 和 Objects 文件夾是 MDK 自動(dòng)生成的文件夾,用于存放編譯過程產(chǎn)生的中間文件)我們選擇把Listings和Objects這兩個(gè)文件夾刪除,在下一步重新建立文件夾。
二、在 Template 工程目錄下面,新建 3 個(gè)文件夾 CORE, OBJ 以及 STM32F10x_FWLib
用來存放核心文件和啟動(dòng)文件,OBJ 是用來存放編譯過程文件以及 hex 文件,STM32F10x_FWLib 文件夾顧名思義用來存放 ST 官方提供的庫(kù)函數(shù)源碼文件。USER 目錄用來放工程文件,以及存放主函數(shù)文件 main.c,以及其他包括 system_stm32f10x.c 等等。
三 、將官方的固件庫(kù)包里的源碼文件復(fù)制到我們的工程目錄(CORE, OBJ ,STM32F10x_FWLib)文件夾下面
1 STM32F10x_FWLib文件夾
打開官方固件庫(kù)包,定位到我們之前準(zhǔn)備好的固件庫(kù)包的目錄
STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver 下面,
將目錄下面的 src,inc 文件夾 copy 到我們剛才建立的 STM32F10x_FWLib 文件夾下面。
src 存放的是固件庫(kù)的 .c 文件, inc 存放的是對(duì)應(yīng)的.h 文件,您不妨打開這兩個(gè)文件目錄過目一
下里面的文件,每個(gè)外設(shè)對(duì)應(yīng)一個(gè) .c 文件和一個(gè) .h 頭文件
- CORE文件夾(啟動(dòng)文件)
(1) 官方固件庫(kù)包,定位到目錄
STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport 下面,將文件 core_cm3.c 和文件 core_cm3.h 復(fù)制到 CORE 下 面 去 。
(2) 然 后 定 位 到 目 錄
STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm 下面,將里面 startup_stm32f10x_hd.s 文件復(fù)制到 CORE 下面。
現(xiàn)在看看我們的 CORE 文件夾下面的文件:
3.USER文件夾
(1)
STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x 下面
將里面的三個(gè)文件 stm32f10x.h,system_stm32f10x.c,system_stm32f10x.h ,復(fù)制到我們的 USER 目錄之下。
(2)
STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template 下面的 4 個(gè)文 件
main.c,stm32f10x_conf.h,stm32f10x_it.c,stm32f10x_it.h 復(fù)制到 USER 目錄下面。
總共9個(gè),除了自帶的兩個(gè)外,4個(gè).h,3個(gè).c
四、將這些文件(CORE USER FWILD)加入我們的工程中去
右鍵點(diǎn)擊 Target1,選擇 Manage Project Items——> Project Targets 一欄,我們將
(1)Target 名字修改為 Template
(2)刪一加三
在 Groups 一欄刪掉一個(gè) Source Group1
建立三個(gè) Groups : USER,CORE,FWLIB
然后點(diǎn)擊 OK ,可以看到我們的 Target 名字以及 Groups 情況。
五 向Group里面添加我們所需要的文件
1.FWLID
右鍵點(diǎn)擊Tempate ,選擇選擇 Manage Project Itmes ,然后選擇需要添加文件的 Group ,這里第一步我
們選擇 FWLIB , 然 后 點(diǎn) 擊 右 邊 的 Add Files, 定 位 到 我 們 剛 才 建 立 的目錄STM32F10x_FWLib/src 下面,將里面所有的文件選中( Ctrl+A),然后點(diǎn)擊 Add,然后 Close.
可以看到 Files 列表下面包含我們添加的文件。
2 .CORE
用同樣的方法,將 Groups 定位到 CORE 和 USER 下面,添加需要的文件。這里
我們的 CORE 下面需要添加的文件為 core_cm3.c,startup_stm32f10x_hd.s ( 注意,默認(rèn)添加的
時(shí)候文件類型為 .c, 也就是添加 startup_stm32f10x_hd.s 啟動(dòng)文件的時(shí)候,你需要選擇文件類型
為 All files 才能看得到這個(gè)文件 )
3 .USER
USER 目錄下面需要添加的文件為 main.c,stm32f10x_it.c, system_stm32f10x.c.
這樣我們需要添加的文件已經(jīng)添加到我們的工程中了,最后點(diǎn)擊 OK,回到工程主界面。
六 生成編譯文件
點(diǎn)擊魔術(shù)棒,然后選擇“ Output ”選項(xiàng)下面的“ Select folder for objects… ” , 然后選
擇目錄為我們上面新建的 OBJ 目錄。這里大家注意,如果我們不設(shè)置 Output 路徑,那么
默認(rèn)的編譯中間文件存放目錄就是 MDK 自動(dòng)生成的 Objects 目錄和 Listings 目錄。
七 添加頭文件
這里大 家要注意,對(duì)于任何一個(gè)工程,我們都需要把工程中引用到的所有頭文件的路徑都包含到
進(jìn)來。 回到工程主菜單,點(diǎn)擊魔術(shù)棒 ,出來一個(gè)菜單,然后點(diǎn)擊 c/c++ 選項(xiàng) . 然后點(diǎn)擊
Include Paths 右邊的按鈕。彈出一個(gè)添加 path 的對(duì)話框,然后我們將圖上面的 3 個(gè)目錄添
加進(jìn)去。記住, keil 只會(huì)在一級(jí)目錄查找,所以如果你的目錄下面還有子目錄,記得 path
一定要定位到最后一級(jí)子目錄。然后點(diǎn)擊 OK.
此外這塊要注意依據(jù)芯片內(nèi)存的大小選擇對(duì)應(yīng)的“M”或者“H”,這個(gè)很關(guān)鍵或者會(huì)編譯出錯(cuò),另外注意右下角的“C99”也要勾選上,涉及到C語(yǔ)言編譯算法
八 配置全局宏定義變量
定位到 c/c++ 界面,然后填寫 “STM32F10X_HD,USE_STDPERIPH_DRIVER”到 Define 輸入框里面 ( 請(qǐng)注意,兩個(gè)標(biāo)識(shí)符 中間是逗號(hào)不是句號(hào),如果您不能確定您輸入的是正確的,請(qǐng)直接打開我們光盤任何一個(gè) 庫(kù)函數(shù)實(shí)例,然后復(fù)制過來這串文字即可 ) 。文章來源:http://www.zghlxwxcb.cn/news/detail-717071.html
九、打開工程 USER 下面的 main.c 文件,在編譯之前復(fù)制下面覆蓋main.c里的程序,記得在最后一行回車(enter),不然編譯時(shí)有警告。
#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);
} }
重新編譯代碼,我們可在OBJ文件夾里看到.hex文件。
實(shí)際上經(jīng)過前面 的 步驟,我們的工程模板已經(jīng)建立完成。但是在我們 ALIENTEK 提供
的實(shí)驗(yàn)中,每個(gè)實(shí)驗(yàn)都有一個(gè) SYSTEM 文件夾,下面有 3 個(gè)子目錄分別為 sys,usart,delay ,
存放的是我們每個(gè)實(shí)驗(yàn)都要使用到的共用代碼,該代碼是由我們 ALIENTEK 編寫,該代碼
的原理在我們第五章會(huì)有詳細(xì)的講解,我們這里只是引入到工程中,方便后面的實(shí)驗(yàn)建立
工程。
首先,找到我們實(shí)驗(yàn)光盤, 打開任何一個(gè)固件庫(kù)的實(shí)驗(yàn) ,可以看到下面有一個(gè) SYSTEM 文
件夾,比如我們打開實(shí)驗(yàn) 1 的工程目錄如下:
可以看到有一個(gè) SYSTEM 文件夾,進(jìn)入 SYSTEM 文件夾,里面有三個(gè)子文件夾分別為
delay,sys,usart ,每個(gè)子文件夾下面都有相應(yīng)的 .c 文件和 .h 文件。我們接下來要將這三個(gè)目錄下
面的代碼加入到我們工程中去。
用我們之前講解步驟 13 的辦法,在工程中新建一個(gè)組,命名為 SYSTEM ,然后加入這三
個(gè)文件夾下面的 .c 文件分別為 sys.c ,delay.c,usart.c,如下圖:
接下來我們將對(duì)應(yīng)的三個(gè)目錄( sys,usart,delay )加入到 PATH 中去,因?yàn)槊總€(gè)目錄下面都有相
應(yīng)的 .h 頭文件,這請(qǐng)參考步驟 七 即可,加入后的截圖是:
最后點(diǎn)擊 OK 。這樣我們的工程模板就徹底完成了,這樣我們就可以調(diào)用 ALIENTEK 提供的
SYSTEM 文件夾里面的函數(shù)。文章來源地址http://www.zghlxwxcb.cn/news/detail-717071.html
到了這里,關(guān)于Keil5 MDK新建項(xiàng)目工程的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!