1.創建模板主目錄Template,在主目錄下添加5個子文件夾(USER,CORE,FWLIB,SYSTEM,OBJ)
2.創建項目,打開keil,菜單選擇project->new uVision project
項目保存路徑為Template/USER,項目名稱為Template
選擇自己開發的相應芯片,我是用的是STM32F407ZG, 點擊ok 點擊Cancel
3..添加STM32庫函數
將函數庫目錄下\STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Libraries\STM32F4xx_StdPeriph_Driver 中的src與inc復制到FWLIB文件夾中
(src存放的是庫函數,inc中存放的是對應的頭文件h)
4.啟動文件復制到我們的工程目錄 CORE 之下
\STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templat
es\arm 下面,將文件 startup_stm32f40_41xxx.s 復制到 CORE 目錄下面
\STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Libraries\CMSIS\Includ , 將 里 面 的 四 個 頭文件 :
core_cm4.h、core_cm4_simd.h、core_cmFunc.h 以及 core_cmInstr.h 同樣復制到 CORE 目錄下
面。現在看看我們的 CORE 文件夾下面的文件
5.定位到目錄:STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Libraries\CMSIS\Device\ST\STM32F4xx\Include 將里面
的 2 個頭文件 stm32f4xx.h 和 system_stm32f4xx.h 復制到 USER 目錄之下。這兩個頭文件是
STM32F4 工程非常關鍵的兩個頭文件。
然后進入目錄\STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Project\STM32F4xx_StdPeriph_Templates ,
將 目 錄 下 面 的 5 個 文 件 main.c , stm32f4xx_conf.h , stm32f4xx_it.c , stm32f4xx_it.h ,system_stm32f4xx.c 復制到 USER 目錄下面。
6.我們將需要的固件庫相關文件復制到了我們的工程目錄下面,下面我們將
這些文件加入我們的工程中去。右鍵點擊 Target1,選擇 Manage Project Items
將project Targedts下的Target1命名為Template
在group下點擊虛線框按鈕添加3個目錄(USER,CORE,FWELIB)
7。下面我們往 Group 里面添加我們需要的文件。我們按照步驟 9 的方法, 右鍵點擊點擊
Tempate,選擇 Manage Project Items.然后選擇需要添加文件的 Group,這里第一步我們選
擇 FWLIB,然后點擊右邊的 Add Files,定位到我們剛才建立的目錄\FWLIB\src 下面,將里
面所有的文件選中(Ctrl+A),然后點擊 Add,然后 Close.可以看到 Files 列表下面包含我們
添加的文件,
對於我們寫代碼,如果我們只用到了其中的某個外設,我們就可以不
用添加沒有用到的外設的庫文件。例如我只用 GPIO,我可以只用添加 stm32f4xx_gpio.c 而
其他的可以不用添加。這里我們全部添加進來是為了后面方便,不用每次添加,當然這樣
的壞處是工程太大,編譯起來速度慢,用戶可以自行選擇。
這里有個文件 stm32f4xx_fmc.c 比較特殊。這個文件是 STM32F42 和 STM32F43 系列才用到,
所以我們這里要把它刪掉(注意是 stm32f4xx_fmc.c 要刪掉,不要刪掉 stm32f4xx_fsmc.c)
8.將 Groups 定位到 CORE 和 USER 下面,添加需要的文件。這里
我們的 CORE 下面需要添加的文件為 startup_stm32f40_41xxx.s(注意,默認添加的時候文件類
型為.c,也就是添加 startup_stm32f40_41xxx.s 啟動文件的時候,你需要選擇文件類型為 All files
才能看得到這個文件 ),USER 目錄下面需要添加的文件為 main.c,stm32f4xx_it.c,
system_stm32f4xx.c。 這樣我們需要添加的文件已經添加到我們的工程中去了,最后點擊 OK,
回到工程主界面。
9.接下來我們要在 MDK 里面設置頭文件存放路徑。也就是告訴 MDK 到那些目錄下面去尋
找包含了的頭文件。這一步驟非常重要。如果沒有設置頭文件路徑,那么工程會出現報錯
頭文件路徑找不到。
點擊魔棒工具->選擇c/c++
選擇includ paths
添加三個目錄
CORE,FWLIB/inc,USER
然后在 Define 輸入框連輸入:STM32F40_41xxx,USE_STDPERIPH_DRIVER。注意這里是兩個標識符 STM32F40_41xxx
和 USE_STDPERIPH_DRIVER,他們之間是用逗號隔開的
10.接下來我們要編譯工程,在編譯之前我們首先要選擇編譯中間文件編譯后存放目錄。
方法是點擊魔術棒
,然后選擇“Output”選項下面的“Select folder for objects…”,
然后選擇目錄為我們上面新建的 OBJ 目錄。同時將下方的三個選項框都勾上
在編譯之前,我們先把 main.c 文件里面的內容替換為如下內容:
#include "stm32f4xx.h" void Delay(__IO uint32_t nCount); void Delay(__IO uint32_t nCount) { while(nCount--){} } int main(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(GPIOF, &GPIO_InitStructure); while(1){ GPIO_SetBits(GPIOF,GPIO_Pin_9|GPIO_Pin_10); Delay(0x7FFFFF); GPIO_ResetBits(GPIOF,GPIO_Pin_9|GPIO_Pin_10); Delay(0x7FFFFF); } }
與此同時,我們要將 USER 分組下面的 stm32f4xx_it.c 文件內容清空。或者刪掉其中的 32 行對
main.h 頭文件的引入以及 144 行 SysTick_Handler 函數內容,
下面我們點擊編譯按鈕編譯工程,可以看到工程編譯通過沒有任何錯誤和警告
11.這里我們要修改 System_stm32f4xx.c 文件,把 PLL 第一級分頻系數 M 修改為 8,
這樣達到主時鍾頻率為 168MHz。修改方法如下:
#define PLL_M 8
#define HSE_VALUE ((uint32_t)8000000)