本文图文并茂地介绍了如何在IAR建立STM32F407工程。

###安装环境

环境:win8.1
 
图1  
 
IAR的安装略过。
 
ST-Link驱动下载:猛击这里!
 
STM32F4-Discovery资料(原理图,元件清单,芯片编程手册,等):猛击这里!
 
STM32F4固件库:猛击这里!
 
好,接下来我们开始

##START

  下载固件库,解压后得到:

图2


  打开IAR,点击Project->Create New Project…,弹出如下窗口:

图3


  得到一个只有main函数的工程,尝试编译,提示需要保存workspace,保存后继续编译,提示编译通过。

图4


  右击workspace窗口中的工程->options…,弹出如下窗口:

图5


  选择设备为STM32F407VG,FPU为VFPv4。

图6


  选择debugger为ST-LINK。

图7


  选择ST-LINK接口为SWD。

图8


  然后再次编译,就能烧录到开发板中并进行调试了。

  接下来,添加STM32固件库和DSP库。先从官网下载到STM32F4-Discovery_FW_V1.1.0,其中含有STM32F4的固件库,名为STM32F4xx_StdPeriph_Driver,将其复制到工程目录下。还需要CMSIS,在STM32F4-Discovery_FW_V1.1.0也可以找到。把CMSIS中的DSP_Lib(一些信号处理和数学相关的库)、ST(公共文件)、Include(cortex内核相关头文件)拷贝到工程目录下。并把ST文件夹下的无用文件删除,只留下ST/STM32F4xx/Sources/Templates下的system_stm32f4xx.c和其中的iar文件夹中的startup_stm32f4xx.s;把CMSIS/Include下的core_cm0.h和core_cm3.h删除。

  文件已经齐全了,开始构建IAR工程中的目录结构。先来看看文件夹的目录结构吧。

图9


  准备开始构建IAR中的目录结构前,要先明白一个事实:IAR中的目录结构和文件系统中的目录结构是不一样的,二者可以形成不同的结构。

  仿照文件系统的结构,我们在项目下建立如下结构:

图10


  StdPeriph和DSP库不必多说,添加文件夹中对应的文件。CMSIS/inc中添加文件系统中CMSIS/Include中的头文件;CMSIS/ST/inc和CMSIS/ST/src中分别添加文件系统中CMSIS\ST\STM32F4xx下的头文件和源文件。最后,在任何一个固件库的example中找到名为stm32f4xx_conf.h、stm32f4xx_it.c、stm32f4xx_it.h的文件,添加到工程根目录下(当然,其他目录也是可以的),并把stm32f4xx_it.c添加到IAR工程中。stm32_f4xx_it.c和stm32f4xx_it.h中定义和声明了一些常见的中断处理,如果不需要的话,不加入工程也是可以的。

  构造好的目录结构:

图11


  当然,这个时候编译是不能通过的,因为我们还没有设置头文件搜索路径,导致很多头文件无法找到。

  现在来设置头文件搜索路径。同样是在工程名字上右键→Options…,然后点击C/C++ Compiler→Preprocessor

图12


  红色矩形框中的就是添加头文件路径的地方,依次把刚才的哪些头文件所在目录(文件系统中的目录)添加到这里。最好采用以工程目录为起始的相对路径,否则当我们复制整个工程目录到其他地方时,会导致编译错误。

图13


  然后还需要添加两个宏定义,以表明我们使用的是cortex-M4的数学库和STM32的标准固件库。

图14


  编译时发现有一个警告,原因是arm_math.h的第5390行的一个类型隐式转换,顺手将其改掉:

	/* Calculation of index */
	i = (int)((x - S->x1) / xSpacing);

  注意,修改时可能因为文件的只读属性而保存失败,这时需要先把只读属性去掉,修改保存后再添加只读属性。

  最后,随便用个程序测试编译和烧录是否正常。

  DONE