使用IAR和STM32固件库v3.5建立STM32F103ZET6工程步骤
软件:IAR
单片机:STM32F103ZET6
操作系统:win7
1.建立工程目录,在工程目录下新建如下目录:
各目录的作用从上到下依次为:
- APP 用户的应用程序,包含所有驱动头文件,调用所有驱动初始化函数,并在此实现单片机的完整功能。用此文件封装应用程序后,mian.c只需要在while(1)循环中调用一个app()函数即可。因此APP功能需修改时只需要修改APP文件和中断函数。
- Core 与内核相关的文件(包含Startup启动文件,如果是keil的工程还需要添加core_cm3.c和core_cm3.h,iar软件自带这2个文件)
- Libraries 标准外设驱动库文件(内有inc、src)
- Preiph_Driver 用户的外设驱动文件,包括板级外设驱动和片内外设配置驱动。相互独立,禁止互相依赖,可依赖库中的驱动。用户直接在app中实现中断函数,app调用片内外设配置驱动的中断初始化函数时,通过形参的函数指针,将用户中断函数地址传递给官方中断函数。
- Project 软件建工程创建的各个文件(IAR软件要在此包含.icf文件用于定义内存区,keil不需要)
- User 用户自定义的文件。说明文档介绍程序功能和排故记录等。
2.拷贝固件库的文件分发到各目录中:
-
在APP中新建app.c和app.h(此时软件还没打开,我直接建立txt文件强制修改后缀名)。
-
将STM32最新固件库v3.5\Libraries\CMSIS\CM3
DeviceSupport\ST\STM32F10x\startup\iar\startup_stm32f10x_hd.s拷贝到目录Core中。(注意:这个文件视单片机容量选择,自行查询.s汇编启动文件命名含义)
-
将STM32最新固件库v3.5\Libraries\STM32F10x_StdPeriph_Driver中的inc和src拷贝到目录Libraries中。
-
将STM32最新固件库v3.5\Libraries\CMSIS\CM3\DeviceSupport
\ST\STM32F10x中的stm32f10x.h、system_stm32f10x.c、system_stm32f10x.h拷贝到目录User中。
-
将STM32最新固件库v3.5\Project\STM32F10x_StdPeriph_Template中的stm32f10x_conf.h、stm32f10x_it.c、stm32f10x_it.h拷贝到目录User中。
-
在User目录下新建main.c。
-
将STM32最新固件库v3.5
Project\STM32F10x_StdPeriph_Template\EWARM中的stm32f10x_flash.icf拷贝到目录Project中。
3.至此拷贝文件完成,接下来是新建工作空间和一个空工程(简写,IAR使用方法请参考别人的教程)。
- 打开IAR软件,新建工作空间,将工作空间保存在Project文件夹所在目录的上一级目录中,以便有需要时包含所有工程进来。在Project目录中新建一个空工程,并在IAR中按照Project文件所在位置的同级目录(APP、Core等)的命名新建5个目录(不包括Project),将各目录中对应的.c文件添加到IAR中的各目录中。结果如下:
其中output是IAR自动添加的目录。
4.配置工程
- 右击目录最上边的 1.steering_engine -> options进入配置工程界面
- 如图选择STM32单片机型号,这里最终要选择的是STM32F103ZE
- 接下来设置图示2处,注意上边栏选项变化。
- 在图示界面点击图示按钮设置好所有.h头文件的包含路径
** 注意:要点进去设置路径才能包含到最后一级目录
- 将所有路径转换为相对路径,以保证工程可以移动位置。
- 在下面的框中添加2个宏定义:
USE_STDPERIPH_DRIVER
STM32F10X_HD
(注意:后面这条视单片机容量选择,还可选STM32F10X_LD、STM32F10X_MD,后缀名与本文第2步《2.拷贝固件库的文件分发到各目录中》的启动汇编文件后缀名一致) - 设置.icf文件路径,转换相对路径的相对路径自己去头文件包含路径中拷贝(相对路径和文件名中间的斜杠不要丢了,否则报错)。
- 根据自己的仿真器型号选择下拉菜单,我选J-Link,再设置仿真调试功能
- 这个位置根据自己的仿真器接口选择2种模式(根据仿真器型号选择左边栏对应的选项设置仿真器参数)
- 点击OK,配置完成。
- 双击左边栏的main.c,编写一个程序框架,点击框中按钮编译链接
- 只有警告,没有错误,恭喜你完成了自己的第一个stm32工程,向stm32单片机大门伸进去一只脚。