IAR和keil两个开发平台都是arm开发当中比较流行的平台,keil4的版本之间,可以兼容,但是版本4和版本5还是不兼容的,但是IAR的兼容性更加差,好像6.30.x之间是能够兼容的吧,没有实测过,以下是网上摘录的,根据其一步步,笔者实际测试成功,只是有一点小小的不一样需要更改。
==================================================
第一步 建立工程
首先建立一个工程,命名选择路径保存
文件名可以随便取
第二步加载文件
在工程路径下新建三个文件夹,分别为FWlib、CMSIS、USER。
新建的USER用来存放工程文件和用户代码,包括主函数main.c。 FWlib用来存放STM32库里面的inc和src这两个文件,这两个文件包含了芯片上的所有驱动。CMSIS用来存放库为我们自带的启动文件和一些M3系列通用的文件。
(1)将STM32F10x_StdPeriph_Lib_V3.5.0LibrariesSTM32F10x_StdPeriph_Driver的inc跟src这两个文件夹拷贝到FWlib文件夹中。
(2)将STM32F10x_StdPeriph_Lib_V3.5.0ProjectSTM32F10x_StdPeriph_Template下的 main.c、stm32f10x_conf.h、stm32f10x_it.h、stm32f10x_it.c 、system_stm32f10x.c(不要) 拷贝到USER目录下。 stm32f10x_it.h、和stm32f10x_it.c这两个文件里面是中断函数,里面为空,并没有写任何的中断服务程序。stm32f10x_conf.h是用户需要配置的头文件,当我们需要用到芯片中的某部分外设的驱动时,我们只需要在该文件下将该驱动的头文件包含进来即可,片上外设的驱动在src文件夹中,inc文件夹里面是它们的头文件。这三个文件是用户在编程时需要修改的文件,其他库文件一般不需要修改。system_stm32f10x.c是ARM公司提供的符合CMSIS标准的库文件,我们把这个文件移动到CMSIS这个文件夹中。
(3)将STM32F10x_StdPeriph_Lib_V3.5.0LibrariesCMSISCM3DeviceSupportST
STM32F10xstartupiar的全部文件拷贝到STM32-TemplateCMSISstartup(需先在CMSIS新建好startup文件夹)文件夹下。这些是用汇编写的启动文件。根据ST的官方资料:Flash在16 ~32 Kbytes为小容量, 64 ~128 Kbytes 为中容量,256 ~512 Kbytes为大容量,根据使用芯片的容量选用对应的启动文件。这里使用的是STM32F103VCT6,将startup_stm32f10x_hd.s添加到工程中。
(4)将STM32F10x_StdPeriph_Lib_V3.5.0LibrariesCMSISCM3CoreSupport的core_cm3.c和core_cm3.h也拷贝到STM32-TemplateCMSIS文件夹下。
?
有一个地方需要注意:也就是IAR V6.XX 以后的类型定义发生变化。那么这些文件必须复制过来。
C:ProgramFilesIAR SystemsEmbedded Workbench 6.0armCMSISInclude
在这个目录下,复制出来3 个文件即可。放到CMSIS的文件夹下面。
core_cm3.h,core_cmFunc.h,core_cmInstr.h //
?
建立好工程后预,建立Group,然后分类在各个group里增加源文件.
第三步 设置编译环境
在左边的工程窗口,右击选择工程选项,进入Options..。或者”Project”->”Options..”
1. General Options
(1)Target
选择使用的芯片型号
(2).Lib选项卡
自己根据需要,如果需要用到像printf一类函数的就需要设置成full,否则选none。
2.C/C++Complier选项卡
在这里可以设定编程语言、优化等级等等设置。这里只设定Preprocessor,其他的保持默认即可。
(1) 设置包含头文件路径
下面解释下头文件的包含问题:
$PROJ_DIR$ :表示在工程文件所在目录
$PROJ_DIR$..xxxincà... 指从工程文件(.EWP, .EWW文件)所在目录返回上级目录搜索xxx目录,找到后进入搜素inc文件目录
..? 在文件系统中表示 返回到上级目录。
?
还有一种绝对路径的设置例如:在Preinclude 下可以选择对应的文件位置,然后将对应的位置复制到上面的选项框内。选择完成后,把Preinclude 的内容删除。多个INC 目录时,可以一项一项的填写进去。Additional include .....下面可以写很多行,每一个目录换一行就可以了。如:D:WorkSpaceSoftWareMyF4CMSISInclude
绝对路径的缺点就是,当你把工程移动到另外一个盘后或者目录,再编译将产生一大堆找不到头文件的错误。
(2) 芯片类型的预处理
在Defined sysbols 下面,把对应芯片的相关选项填写好。以STM32F103VC 为例,由于STM32固件的要求,必须填写两项
USE_STDPERIPH_DRIVER
STM32F10X_HD
?
3. 配置输出文件
在Output Converter 选项中,将产生输出选择上。并选择输出格式。
Motoroal 是摩托罗拉格式,可以生成.MOT 文件,V6.3 的产生的是.srec 文件。
Intel extended 是英特尔格式。可以生成HEX 文件
Binary 是二进制格式。可以生成.bin 文件
摩托罗拉格式和英特尔格式是不一样的。这和数据格式有关。
一个是小端格式。一个是大端格式。具体的请查找数据格式的说明。
4. 配置仿真器
在Debugger 下面可以选择多种仿真器。本例以J-Link 为例
?
本例采用J-Link 并且采用SWD模式。所以必须选择对应的SWD模式。
该模式下,只需要2 根线就可以仿真了。加上电源和地共4 根线。电路可以最简单。
第四步 修改main.c文件
因为刚刚我们的main.c文件是从官方库里面复制过来的,里面有许多的东西我们是不需要的,为了简化main.c文件,我们将修改如下。
======================================================================
我用的是6.30.4的iar ewarm,和上文的描述有一点不一样, 1,把core_cm3.h,core_cmFunc.h,core_cmInstr.h去掉,删除。 2,在Project -> Options -> General Options -> Library Configuration -> Use CMSIS,右下角的选项中选择 use CMSIS 这样编译就通过了,可能是IAR当中内置cmsis了。