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 工程相关推荐

  1. 1、新建基于标准固件库MDK5工程模板(STM32F103ZET6)

    新建基于标准固件库MDK5工程模板 1.STM32官方库文件夹介绍 如上图,是ST官方提供的STM32标准固件库的文件包结构: STM32官方固件库下载地址: "https://www.st ...

  2. stm32(库函数)——新建基于固件库的MDK5工程模板

    这里根据STM32不完全手册记录建立库函数版本的基于固件库的MDK5工程模板. 1.我们每一次新建工程都会新建一个文件夹存放所有文件. 2.点击MDK的菜单:Project->New Uvisi ...

  3. STM32的2.02固件库提供的启动文件详解 stm32f10x_vector.s

    当前的嵌入式应用程序开发过程里,并且C语言成为了绝大部分场合的最佳选择.如此一来main函数似乎成为了理所当然的起点--因为C程序往往从main函数开始执行.但一个经常会被忽略的问题是:微控制器(单片 ...

  4. keil5固件库版本的工程建立

    keil5固件库版本的工程建立 一.一个文件夹,如图再建立4个文件夹 二.准库往上图四个文件夹里粘贴 从标准库里面把Libraries里面的两个文件夹全部复制到新建文件夹Libraries里面 三.来 ...

  5. 嵌入式 新建基于固件库的MDK5工程模板

    1. 在目录下建立一个名为Template的文件夹 2. 打开软件,new一个新的project 3. 在刚才建立的Template文件夹下建立一个USER文件夹(放代码工程文件),然后保存 4. 然 ...

  6. STM32如何下载官方固件库

    ST官网拥有好多权威的资料库和例程固件库.在ST官网获取stm32f103c8t6标准例程固件库 1)登陆ST官网 官网参考网页 2)点击右上角登陆或者注册 3)当登陆成功时,点击Products-& ...

  7. STM32 keil如何下载STM32芯片F1/F4固件库 .pack文件

    1.用keil打开STM32F407的程序,结果提示下面的问题,就是没有安装固件库 2.然后去keil官网下载对应的固件库,官网地址:https://www.keil.com/ 3.然后选中对应的芯片 ...

  8. 如何在Keil官网里面下载固件库(以STM32系列主芯片固件库为例)【最新版】

    在用Keil软件进行代码编写时,第一步需要选择主芯片,如果你的Keil软件里面没有安装对应主芯片的固件库,那么将无法选择对应主芯片,以及导致后面程序无法编译成功.这时需要在网上下载对应的固件库,下载固 ...

  9. 船模制作——遥控模块 基于stm32和nrf24l01(固件库开发)

    目录 nrf24l01介绍 引脚图 引脚功能介绍 模式配置方法 官方宏 stm32配置 引脚映射 初始化函数 SPI模拟通信函数 nrf24l01配置函数 nrf24l01发射和接收 nrf24l01 ...

最新文章

  1. MAT入门到精通(二)
  2. bzoj 2406: 矩阵 ——solution
  3. 共享一个简单的 Javacript Helper library
  4. 5.1 HTML5表单的创建
  5. mysql远程服务器返回错误404未找到_远程服务器返回错误: 404错误、远程服务器返回错误:500错误、 HttpWebResponse远程服务器返回错误:(404、500) 错误。...
  6. Linux运维 第三阶段 (二) DHCP
  7. 使用sklearn来处理类别数据
  8. Go语言 命令行解析(一)
  9. php 访问 sharepoint列表,SharePoint—用REST方式访问列表
  10. php运行条件,PHP配置环境要求 php运行的先决条件
  11. tomcat如何通过配置的方式部署web工程
  12. 学习重要,还是学会学习重要
  13. Camshift算法原理及其Opencv实现
  14. ie6下,给a添加事件,如果事件中有http请求,将会无效
  15. 在Eclipse里自动导入相应包的类名的快捷键
  16. Web表单设计:点石成金的艺术(美)罗博乌斯基pdf
  17. 【安装库】matlab2020b安装及百度网盘提速
  18. 【TSP】基于matlab GUI免疫算法结合蚁群算法求解旅行商问题【含Matlab源码 1910期】
  19. 英雄连2一直显示连接relic服务器,英雄连2联机时出现PleaseWait问题的解决方法_英雄连2PleaseWait问题的解决方法_牛游戏网...
  20. 你想要的宏基因组-微生物组知识全在这(2022.10)

热门文章

  1. (原创).Net将EF运用于Oralce一 准备工作
  2. windows phone 操作 http异步返回结果
  3. GridView的 使用
  4. 使用 XMLBeans 进行编程 XMLBeans 如何引发数据绑定的巨大变革
  5. 安装Oracle9I出现加载数据库时出错:areasQueries错误,提示停止该组件或所有组件安装,之后安装不能进行...
  6. C++ 面向对象(数据封装)
  7. Fire Net HDU1045
  8. 区块链应用落地的6大挑战
  9. 学习windows编程 day6 之模拟记事本
  10. 学习SpringMVC笔记——Intellij IDEA创建SpringMVC项目