【STM32】新建基于STM32F40x 固件库的MDK5 工程
00. 目錄
文章目錄
- 00. 目錄
- 01. 前提條件
- 02. 創建工程步驟
- 03. 系統時鐘配置
- 04. 添加其他功能函數
- 05. 附錄
- 06. 聲明
01. 前提條件
1.1 官方標準固件庫
文件名:STM32F4xx_DSP_StdPeriph_Lib_V1.8.0.zip
技術博客:【STM32】 STM32官方標準固件庫概述
下載地址:STM32F4xx_DSP_StdPeriph_Lib_V1.8.0.rar
1.2 MDK開發環境(5.30版本 其它版本也可以)
文件名:MDK530
技術博客:【STM32】Keil5(MDK-ARM)安裝教程詳解
下載地址:MDK530.rar
02. 創建工程步驟
2.1 創建對應的文件夾
新建下面 5 個子文件夾:CORE ,FWLIB,OBJ,SYSTEM,USER。至于這些文件夾名字,實際上是可以任取的,我們這樣取名只是為了方便識別。對于這些文件夾用來存放什么文件,我們后面的步驟會一一提到。
2.2 創建工程項目
打開 Keil,點擊 Keil 的菜單:Project –>New Uvision Project ,然后將目錄定位到剛才建立的文件夾 Template 之下的 USER 子目錄,同時,工程取名為 01Test之后點擊保存,我們的工程文件就都保存到 USER 文件夾下面。
2.3 保存工程文件名
工程取名為 01Test之后點擊保存,我們的工程文件就都保存到 USER 文件夾下面。
2.4 選擇芯片型號
定位到STMicroelectronics 下面的 STM32F407ZG( 針對我們的 ExplorerSTM32 板子是這個型號)。這里我們選擇 STMicroelectronics→STM32F4 Series→STM32F407→STM32F407ZG
2.5 管理運行時環境
MDK 會彈出 Manage Run-Time Environment 對話框,這是 MDK5 新增的一個功能,在這個界面,我們可以添加自己需要的組件,從而方便構建開發環境,我們直接點擊 Cancel即可,取消之后得到的界面如下:
2.6 復制固件庫源碼文件
打開官方固件庫包,定位到我們之前準備好的固件庫包的目錄:\STM32F4xx_DSP_StdPeriph_Lib_V1.8.0\Libraries\STM32F4xx_StdPeriph_Driver 下面,將目錄下面的 src,inc 文件夾 copy 到我們剛才建立的 FWLib 文件夾下面。
src 存放的是固件庫的.c 文件,inc 存放的是對應的.h 文件,每個外設對應一個.c 文件和一個.h 頭文件。
2.7 復制啟動文件
將固件庫包里面相關的啟動文件復制到我們的工程目錄 CORE 之下。
\STM32F4xx_DSP_StdPeriph_Lib_V1.8.0\Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates\arm 下面,將文件 startup_stm32f40_41xxx.s 復制到 CORE 目錄下面。然后定位到目錄\STM32F4xx_DSP_StdPeriph_Lib_V1.8.0\Libraries\CMSIS\Includ , 將 里 面 的 四 個 頭 文 件 :core_cm4.h 、core_cm4_simd.h 、core_cmFunc.h 以及 core_cmInstr.h 同樣復制到 CORE 目錄下面。現在看看我們的 CORE 文件夾下面的文件,
2.8 復制其它頭文件和源文件
首先定位到目錄:STM32F4xx_DSP_StdPeriph_Lib_V1.8.0\Libraries\CMSIS\Device\ST\STM32F4xx\Include 將里面的 2 個頭文件 stm32f4xx.h 和 system_stm32f4xx.h 復制到 USER 目錄之下。這兩個頭文件是STM32F4 工程非常關鍵的兩個頭文件。后面我們講解相關知識的時候會給大家詳細講解。然后進入目錄\STM32F4xx_DSP_StdPeriph_Lib_V1.8.0\Project\STM32F4xx_StdPeriph_Templates ,將 目 錄 下 面 的 5 個 文 件 main.c , stm32f4xx_conf.h , stm32f4xx_it.c , stm32f4xx_it.h ,system_stm32f4xx.c 復制到 USER 目錄下面。
2.9 添加文件到工程中
前面幾個步驟,我們將需要的固件庫相關文件復制到了我們的工程目錄下面,下面我們將這些文件加入我們的工程中去。右鍵點擊Target1,選擇 Manage Project Items,
2.10 設置項目結構
Project Targets一欄,我們將Target名字修改為01Test,然后在Groups一欄刪掉一個SourceGroup1,建立三個 Groups:USER,CORE,FWLIB。然后點擊 OK,可以看到我們的 Target名字以及 Groups 情況如下圖:
選擇OK,出現如下界面:
2.11 添加FWLIB目錄下的文件
右鍵點擊點擊01Test,選擇 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)。
2.12 添加CORE目錄下的文件
用同樣的方法,將 Groups 定位到 CORE,添加需要的文件。這里我們的 CORE 下面需要添加的文件為 startup_stm32f40_41xxx.s( 注意,默認添加的時候文件類型為.c, 也就是添加 startup_stm32f40_41xxx.s 啟動文件的時候,你需要選擇文件類型為 All files件才能看得到這個文件),
2.13 添加USER目錄下文件
USER 目錄下面需要添加的文件為 main.c,stm32f4xx_it.c,system_stm32f4xx.c。 這樣我們需要添加的文件已經添加到我們的工程去了,最后點擊 OK,回到工程主界面。
主界面如下:
2.14 設置頭文件路徑
我們要在 MDK 里面設置頭文件存放路徑。也就是告訴 MDK 到那些目錄下面去尋找包含了的頭文件。這一步驟非常重要。 如果沒有設置頭文件路徑,那么工程會出現報錯頭文件路徑找不到。
這里我們需要添加的頭文件路徑包括:\CORE, \USER\以及\FWLIB\inc。這里大家務必要仔細,固件庫存放的頭文件子目錄是\FWLIB\inc,不是 FWLIB\src。
2.15 添加宏定義
接下來對于 STM32F40 系列的工程,還需要添加一個全局宏定義標識符。添加方法是點擊魔術棒之后,進入 C/C++選項卡,然后在 Define 輸入框連輸入:STM32F40_41xxx,USE_STDPERIPH_DRIVER。注意這里是兩個標識符 STM32F40_41xxx和USE_STDPERIPH_DRIVER, 他們之間是用逗號隔開的,請大家注意。
2.16 設置中間文件存放路徑
然后選擇“Output”選項下面的“Select folder for objects…”,然后選擇目錄為我們上面的 新建的 OBJ 目錄。同時將下方的三個選項框都勾上。
Create HEX File 選項選上是要求編譯之后生成 HEX 文件。Browse Information 選項選上是方便我們查看工程中的一些函數變量定義。
2.17 修改主函數代碼
#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 函數內容,
2.18 編譯工程
可以看到工程編譯通過沒有任何錯誤和警告。
到這里,一個基于固件庫 V1.8 的工程模板就建立完成,同時在工程的 OBJ 目錄下面生成了對應的 hex 文件。
03. 系統時鐘配置
我們要修改 System_stm32f4xx.c 文件,把 PLL 第一級分頻系數 M 修改為 8,這樣達到主時鐘頻率為 168MHz。
/************************* PLL Parameters *************************************/ #if defined(STM32F40_41xxx) || defined(STM32F427_437xx) || defined(STM32F429_439xx) || defined(STM32F401xx) || defined(STM32F469_479xx)/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */#define PLL_M 8 //之前是25 #elif defined(STM32F412xG) || defined(STM32F413_423xx) || defined (STM32F446xx)#define PLL_M 8 #elif defined (STM32F410xx) || defined (STM32F411xE)#if defined(USE_HSE_BYPASS)#define PLL_M 8 #else /* !USE_HSE_BYPASS */#define PLL_M 16#endif /* USE_HSE_BYPASS */ #else #endif /* STM32F40_41xxx || STM32F427_437xx || STM32F429_439xx || STM32F401xx || STM32F469_479xx */同時,我們要在 stm32f4xx.h 里面修改外部時鐘 HSE_VALUE 值為 8MHz,因為我們的外部高速時鐘用的晶振為 8M,具體修改方法如下:
#if !defined (HSE_VALUE) #define HSE_VALUE ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */#endif /* HSE_VALUE */一定要在對應的配置文件中,找到相應的代碼行,修改為符合我們硬件的值即可。
04. 添加其他功能函數
可以看到有一個 SYSTEM 文件夾,進入 SYSTEM 文件夾,里面有三個子文件夾分別為delay,sys,usart,每個子文件夾下面都有相應的.c 文件和.h 文件。 我們將 SYSTEM 文件夾 和 里面的三個子文件夾復制到我們工程根目錄中。 如下圖。我們接下來要將這三個目錄下面的源文件加入到我們工程,同時將頭文件路徑加入到 PATH 中
然后點擊“OK”之后可以看到工程中多了一個 SYSTEM 組,下面有 3 個.c 文件。
接下來我們將對應的三個目錄(sys,usart,delay)加入到 PATH 中去,因為每個目錄下面都有相應的.h 頭文件。
修改主函數如下
#include "stm32f4xx.h" #include "usart.h" #include "delay.h"int main(void) {u32 t=0;uart_init(115200);delay_init(84);while(1){printf("t:%d\r\n",t);delay_ms(500);t++;} }編譯結果
05. 附錄
6.1 【STM32】STM32系列教程匯總
網址:【STM32】STM32系列教程匯總
06. 聲明
該教程參考了正點原子的《STM32 F4 開發指南》
總結
以上是生活随笔為你收集整理的【STM32】新建基于STM32F40x 固件库的MDK5 工程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【STM32】error unknown
- 下一篇: 【STM32】程序下载(ST-LINK