【无标题】

文章详细介绍了如何使用KeilMDK5创建基于STM32F40x的固件库工程模板,包括新建文件夹结构、选择芯片型号、复制固件库文件、添加启动文件、设置头文件路径、定义宏、选择编译输出目录以及编写基本的main.c代码。
摘要由CSDN通过智能技术生成

STM32 正点原子学习笔记 day1新建基于 STM32F40x 固件库的 MDK5 工程模板

1)

在建立工程之前,我们建议用户在电脑的某个目录下面建立一个文件夹,后面所建立的工
程都可以放在这个文件夹下面,这里我们建立一个文件夹为 Template。再Template子目录下面再新建五个文件夹分别取名:CORE ,FWLIB,OBJ,SYSTEM,USER.
ps://img-home.csdnimg.cn/images/20220524100510.png#pic_cente

2)

打开 Keil,点击 Keil 的菜单:Project –>New Uvision Project ,然后将目录定位到刚才建立的文件夹 Template 之下的 USER 子目录,同时,工程取名为 Template 之后点击保存,我们的工程文件就都保存到 USER 文件夹下面。
在这里插入图片描述

3)

接下来会出现一个选择 Device 的界面,就是选择我们的芯片型号,这里我们定位到STMicroelectronics 下面的 STM32F407ZG。特别注意:一定要安装对应的器件 pack 才会显示这些内容哦!
在这里插入图片描述
在这里插入图片描述

4)

下面我们要将官方的固件库包里的源码文件复制到我们的工程目录文件夹下面。打开官方固件库包,定位到我们之前准备好的固件库包的目录:==STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Libraries\STM32F4xx_StdPeriph_Driver ==下面,将目录下面的 src,inc 文件夹 copy 到我们刚才建立的 FWLib 文件夹下面。src 存放的是固件库的.c 文件,inc 存放的是对应的.h 文件,每个外设对应一个.c 文件和一个.h 头文件。
在这里插入图片描述

5)

下面我们要将固件库包里面相关的启动文件复制到我们的工程目录 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.hcore_cm4_simd.hcore_cmFunc.h 以及 core_cmInstr.h 同样复制到 CORE 目录下
面。
在这里插入图片描述

6)

接下来我们要复制工程模板需要的一些其他头文件和源文件到我们工程。
首先定位到目录STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Libraries\CMSIS\Device\ST\STM32F4xx\Include 将里面的 2 个头文件 ==stm32f4xx.h system_stm32f4xx.h 复制到 USER 目录之下。
然后进入目录: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 目录下面。
在这里插入图片描述

8)

下面我们将这些文件加入我们的工程中去。右键点击 Target1,选择 Manage Project Items,Project Targets 一栏,我们将 Target 名字修改为 Template,然后在 Groups 一栏删掉一个 Source Group1,建立三个 Groups:USER,CORE,FWLIB。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

9)

下面我们往 Group 里面添加我们需要的文件。
右键点击点击Tempate,选择 Manage Project Items.然后选择需要添加文件的 Group,这里第一步我们选择 FWLIB,然后点击右边的 Add Files,定位到我们刚才建立的目录FWLIB\src 下面,将里面所有的文件选中(Ctrl+A),然后点击 Add,然后 Close.可以看到 Files 列表下面包含我们添加的文件。这里有个文件 stm32f4xx_fmc.c 比较特殊。这个文件是 STM32F42 和 STM32F43 系列才用到,
所以我们这里要把它删掉(注意是 stm32f4xx_fmc.c要删掉不要删掉 stm32f4xx_fsmc.c)。
在这里插入图片描述

10)

用同样的方法,将 Groups 定位到 CORE 和 USER 下面,添加需要的文件。这里我们的 CORE 下面需要添加的文件为 startup_stm32f40_41xxx.s(注意,默认添加的时候文件类型为.c,也就是添加 startup_stm32f40_41xxx.s 启动文件的时候,你需要选择文件类型为== All files才能看得到这个文件 ),USER 目录下面需要添加的文件为 main.c==,stm32f4xx_it.csystem_stm32f4xx.c。 这样我们需要添加的文件已经添加到我们的工程中去了,最后点击 OK,回到工程主界面。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

11)

重点!!
接下来我们要在 MDK 里面设置头文件存放路径。也就是告诉 MDK 到那些目录下面去寻找包含了的头文件。这一步骤非常重要。如果没有设置头文件路径,那么工程会出现报错头文件路径找不到。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里我们需要添加的头文件路径包括:\CORE, \USER\以及\FWLIB\inc。这里大家务必要仔细,固件库存放的头文件子目录是FWLIB\inc,不是 FWLIB\src。很多朋友都是这里弄错导致报很多奇怪的错误。

12)

接下来对于 STM32F40 系列的工程,还需要添加一个全局宏定义标识符。添加方法是点击魔术棒之后,进入 C/C++选项卡,然后在 Define 输入框连输入:STM32F40_41xxx,USE_STDPERIPH_DRIVER。注意这里是两个标识符STM32F40_41xxxUSE_STDPERIPH_DRIVER,他们之间是用逗号隔开的,请大家注意。
在这里插入图片描述

13)

接下来我们要编译工程,在编译之前我们首先要选择编译中间文件编译后存放目录。方法是点击魔术棒然后选择“Output”选项下面的“Select folder for objects…”,然后选择目录为我们上面新建的 OBJ 目录。同时将下方的三个选项框都勾上。
在这里插入图片描述
在这里插入图片描述

14)

在编译之前,我们先把 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 函数内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值