1、首先新建一个文件夹,名字可以任取,在这里我取名为STM32F407

2、在这个文件夹中新建五个文件夹

3、打开MDK,Project –>New Uvision Project ,将目录定位到刚刚建立的文件夹中的USER子目录。同时取名STM32F407之后进行保存。我们的工程文件就都保存在USER文件夹下面了。接下来会显示Device 的界面,就是选择我们的芯片,在这里我选择的是STM32F407VGT6

点击OK。MDK会跳出Manage Run-Time Environment 的界面,这时MDK5新增的功能,在这个界面,我们可以添加自己需要的组件,从而方便构建开发环境。在这里我们直接点Cancel即可。

4、下面我们将官方的固件库包里的源码文件复制到我们的工程目录文件夹下面。打开官方固件库包。

打开library,打开STM32F4xx_StdPeriph_Driver,将inc和src文件夹copy到FWLib文件夹中。

5、将固件库包里面相关的启动文件Copy到我们的工程目录CORE之下。

Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates\arm

将文件 startup_stm32f40_41xxx.s 复制到 CORE 目录下面。

然后定位到目录\Libraries\CMSIS\Include

将 里 面 的 四 个 头 文 件 :
core_cm4.h 、core_cm4_simd.h 、core_cmFunc.h  以及 core_cmInstr.h 同样复制到 CORE 目录下面。

现在我们看下我们的CORE文件夹:

6、接下来我们要复制工程模板需要的一些其他头文件和源文件到我们工程。首先定位到目录:
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 目录下面。

 

现在来看下USER目录下都有啥了:

7、下面我们将这些文件添加到我们的工程中去,右键点击 Target1,选择 Manage Project Items,修改下Project Targets中的名字,在Groups中添加这三个分组,最终得到下图的效果,点击OK

8、下面我们往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)。

用同样的方法,将 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 到那些目录下面去寻找包含了的头文件。这一步骤非常重要。 如果没有设置头文件路径,那么工程会出现报错头文件路径找不到。

 

这里我们需要添加的头文件路径包括:\CORE, \USER\以及\FWLIB\inc。这里大家务必要仔细,固件库存放的头文件子目录\FWLIB\inc,不是 FWLIB\src。

10、接下来对于 STM32F40 系列的工程,还需要添加一个全局宏定义标识符。

在Define输入STM32F40_41xxx,USE_STDPERIPH_DRIVER

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

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

13、下面我们可以点击编译按钮进行编译工程了,可以看到没有错误啦。到这里,一个基于固件库 V1.4 的工程模板就建立完成,

这里还有个非常重要的关键点,就是系统时钟的配置,这在我们的系统时钟章节 4.3 会详细讲解,这里我们要修改 System_stm32f4xx.c 文件,把 PLL 第一级分频系数 M 修改为 8,这样达到主时钟频率为 168MHz。

 

同时,我们要在 stm32f4xx.h 里面修改外部时钟 HSE_VALUE 值为 8MHz,因为我们的外部高
速时钟用的晶振为 8M,

 

另外我们还可以移植正点原子写的

 

到这里为止,我们就将一个工程文件彻底整完啦!!

 

链接:https://pan.baidu.com/s/1XZSWrRILaDbBg0IByGgT1w 
提取码:70pm 
 

 

 

 

 

 

 

 

 

 

 

 

 

 

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐