本文将建立一个基于Nucleo开发板和KEIL5.14的工程模版,由一下几个部分组成:
1、工程模版的建立
2、STlink的设置与永远的流水灯
1、工程模版的建立
1)在建立工程之前,首先建立一个存放模版文件的文件夹,我们把它叫做template。然后在建立6个子文件夹:Doc,Libraries,Listing,Output,Project,USER,在Libraries里建立CMSIS和FWlib文件夹,在CMSIS中建立startup,这些文件夹的名字可以任意取的,这样命名只是为了方便识别。对于这些文件夹用来存放什么文件,后面将会有说明。新建好的目录结构如下图1.1所示。
图1.1
文件目录结构
2)接下来打开KEIL,点击KEIL的菜单;Project->New Project,然后将目录定位到刚刚建立的Project文件夹下。同时工程名取为template点击保存,我们的工程文件就放在Project文件夹下面。操作过程如下图1.2所示
图1.2
工程建立
3)接下来会出现一个选择Device的界面,就是要我们选择具体的CPU芯片型号,针对我们的板子,我们选择STM32F411RE,该过程一定要选择正确。
图1.3
芯片型号选择
点击OK,MDK会弹出
Manage Run-Time Environment
对话框,如图1.4所示。这是MDK5的新功能,在这个界面我们可以添加自己需要的组件,从而方便构建开发环境,这里我们不多做介绍。所以在图1.4中我们直接点击cancel。
图1.4
Manage Run-Time Environment界面
4)
下面我们将要把官方的固件库包里的源代码复制到我们的工程目录文件夹下面。找到STM32F4xx_DSP_StdPeriph_Lib\Libraries\STM32F4xx_StdPeriph_Driver,将其目录下的src,inc文件夹copy到我们刚才建立的FWlib文件夹下面,src存放的是固件库的.c文件,inc存放的是对应的.h文件,如图1.5所示。
1.5
官方库源码文件夹
5)下面我们将固件库包里与启动相关的代码复制到我们的工程目录CORE之下。
打开官方固件包,定位到目录..\STM32F4xx_DSP_StdPeriph_Lib\Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates\arm下,将startup_stm32f411xe.s复制到CMSIS文件夹下的startup文件夹下,然后定位到目录STM32F4xx_DSP_StdPeriph_Lib\Libraries\CMSIS\Include中,将其中的core_cm4.h、core_cmFunc.h、core_cmInstr.h、core_cmSimd.h复制到CMSIS文件夹下面
1.6
CMSIS文件夹下文件
6)
接下来复制工程模板需要的一些其他头文件和源文件到工程。首先定位到目录:
STM32F4xx_DSP_StdPeriph_Lib\Libraries\CMSIS\Device\ST\STM32F4xx\Include将里面的两个头文件stm32f4xx.h、system_stm32f4xx.h
复制到CMSIS文件夹之下。再进入
STM32F4xx_DSP_StdPeriph_Lib\Project\STM32F4xx_StdPeriph_Templates
,将其中的
main.c、stm32f4xx_conf.h、stm32f4xx_it.c、stm32f4xx_it.h、system_stm32f4xx.c复制到USER文件夹下。
7)
经过前面6个步骤我们将固件库的相关内容复制到了工程目录中,现在将他们添加到工程中。打开工程,右键单击Target1,选择Manage Compoments,在Project Targets一栏,我们将Target1名字修改为template,Groups一栏删掉Source Group1,建立5个Groups:
Doc、CMSIS、FWlib、USER、startup,如图1.7所示
图1.7
新建Groups
8)向Groups添加文件定位到我们之前建立的那些文件夹中,对于写代码来说我们一般只需要用到其中某些外设,就只添加那些外设就可以了这里建立模版所以全部添加,便于以后修改。另外stm32f4xx_fsmc.c、s
tm32f4xx_cec.c
tm32f4xx_fmc.c、s
tm32f4xx_fmpi2c.c、s
tm32f4xx_qspi.c
s
tm32f4xx_spdifrx.c
需要删除掉,否则会编译出错,如图1.8
图1.8
不删除库导致编译出错
。
图1.9
添加文件到FWlib
9)
接下来要设置头文件存放路径,就是告诉MDK到哪里去寻找头文件,如果不设置就会出现错误。具体操作如图1.10、图1.11所示。
图1.10
设置头文件路径
图1.11 设置头文件路径
这里我们要添加的头文件路径为\Libraries\FWlib\inc、\USER、\Libraries\CMSIS,注意是
\Libraries\FWlib\inc,而不是
\Libraries\FWlib\src,千万不要弄错。
10)接下来还要在我们要编译工程,在编译之前我们首先要选择编译中间文件编译后存放目录。方法是;点击魔术棒,然后选择“Output”下面的“Select folders of objects...
”然后选择为我们新建的Output,并且将create hex file勾选上。同时将"Listing"
下面的“Select folders of objects...
”选择为我们新建的Listing。如图1。12所示。
图1.12
编译输出文件夹的选择
11)在编译之前将main.c替换为一下内容
-
1 #include"stm32f4xx.h" 2 voidDelay(__IO uint32_t nCount); 3 voidDelay(__IO uint32_t nCount) 4 { 5 while(nCount--); 6 } 7 int main(void) 8 { 9 GPIO_InitTypeDef GPIO_InitStructure; 10 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE); 11 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; 12 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; 13 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; 14 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; 15 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; 16 GPIO_Init(GPIOA,&GPIO_InitStructure); 17 while(1) 18 { 19 GPIO_SetBits(GPIOA,GPIO_Pin_5); 20 Delay(0x7FFFFF); 21 GPIO_ResetBits(GPIOA,GPIO_Pin_5); 22 Delay(0x7FFFFF); 23 }
24 }
与此同时,我们要讲USER分组下面的stm43f4xx_it.c文件内容清空,或者删除掉其中的32行的#include "main.h"和144行的Systick_Handler函数内容。紧接着编译会看看是否有错误,最后编译成功。至此模版建立成功
2、ST-Link的设置与永远的流水灯
1)点击魔术棒,选择Debug,在下拉菜单中选中ST-LINK debugger,并且在setting菜单中设置ort为SWD,速度选择4MHZ然后再点击Flash Download,将Program、Verify和Reset and Run选中,具体操作如图2.1、图2.2、图2.3
图2.1
ST-link的设置
图2.2
ST-LINK debug的设置
图2.3
Flash Download的设置
2)完成后就可以单击下载按钮,可以看到板子的灯在闪烁,就不一一上图了。