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.0\Libraries\STM32F10x_StdPeriph_Driver的inc跟src这两个文件夹拷贝到FWlib文件夹中。
(2)将STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_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.0\Libraries\CMSIS\CM3\DeviceSupport\ST\
STM32F10x\startup\iar的全部文件拷贝到STM32-Template\CMSIS\startup(需先在CMSIS新建好startup文件夹)文件夹下。这些是用汇编写的启动文件。根据ST的官方资料:Flash在16 ~32 Kbytes为小容量, 64 ~128 Kbytes 为中容量,256 ~512 Kbytes为大容量,根据使用芯片的容量选用对应的启动文件。这里使用的是STM32F103VCT6,将startup_stm32f10x_hd.s添加到工程中。
(4)将STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport的core_cm3.c和core_cm3.h也拷贝到STM32-Template\CMSIS文件夹下。
?
有一个地方需要注意:也就是IAR V6.XX 以后的类型定义发生变化。那么这些文件必须复制过来。
C:\ProgramFiles\IAR Systems\Embedded Workbench 6.0\arm\CMSIS\Include\
在这个目录下,复制出来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$\..\xxx\incà\... 指从工程文件(.EWP, .EWW文件)所在目录返回上级目录搜索xxx目录,找到后进入搜素inc文件目录
..? 在文件系统中表示 返回到上级目录。
?
还有一种绝对路径的设置例如:在Preinclude 下可以选择对应的文件位置,然后将对应的位置复制到上面的选项框内。选择完成后,把Preinclude 的内容删除。多个INC 目录时,可以一项一项的填写进去。Additional include .....下面可以写很多行,每一个目录换一行就可以了。如:D:\WorkSpace\SoftWare\MyF4\CMSIS\Include
绝对路径的缺点就是,当你把工程移动到另外一个盘后或者目录,再编译将产生一大堆找不到头文件的错误。
(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了。

基于IAR6或者IAR7建立STM32开发工程(通过实际测试,使用IAR6.30.4)的更多相关文章

  1. ubuntu linux下建立stm32开发环境: 程序烧录 openocd+openjtag

    原文出处: http://blog.csdn.net/embbnux/article/details/17619621 之前建立stm32开发环境,程序也已经编译好生成main.bin,接下来就是要把 ...

  2. ubuntu linux下建立stm32开发环境: GCC安装以及工程Makefile建立

    http://blog.csdn.net/embbnux/article/details/17616809

  3. STM32开发环境--使用MDK建立一个工程

    STM32开发环境--使用MDK建立一个工程 该工程模版是基于库函数基础制作而成,其中有借鉴相关资料.虽然工程模版一旦建立,以后任何项目只需套用即可,但考虑到长时间不使用,在将来某天可能会突然用到,再 ...

  4. Mac下搭建基于PlatformIO的嵌入式开发环境(STM32开发)

    PlatformIO简介 PlatformIO是开源的物联网开发生态系统.提供跨平台的代码构建器.集成开发环境(IDE),兼容 Arduino,ESP8266和mbed等 支持在Windows.Lin ...

  5. 【STM32】基于正点原子『探索者』开发板的烧录

    项目需要一个功能,开发板范例正好有,就买了一块,不过还是有点贵 我手边没有J-Link 用的都是串口烧录 烧录时,先打开右上的开关 如果是仿真器烧录,它无法供电,需要接12V适配器或是杜邦线供电 然后 ...

  6. ubuntu下安装stm32开发环境

    在windowns下开发stm32刚开始学最烦的就是创建工程模板,都不知道为什么要那样设置,而且步骤繁多.现在我告诉大家一个好消息,在linux下配置stm32开发环境包括创建工程,使用JLink仿真 ...

  7. STM32开发(一):简介及开发环境

    1. 背景 STM32是意法(ST)公司开发的基于ARM Cortex-M系列的一系列微控制器(MCU). 有两种库 标准外设库(StdPeriph_Driver.Standard Periphera ...

  8. Step by Step: 基于MFC下的COM组件开发-Helloworld

    http://blog.csdn.net/sybifei/article/details/45008745 [这篇文章有问题, 仅供参考] http://blog.csdn.net/define_us ...

  9. 开发实践丨用小熊派STM32开发板模拟自动售货机

    摘要:本文内容是讲述用小熊派开发板模拟自动售货机,基于论坛提供的工程代码,通过云端开发和设备终端开发,实现终端数据在的华为云平台显示. 本文内容是讲述用小熊派开发板模拟自动售货机,基于论坛提供的工程代 ...

随机推荐

  1. C#学习笔记:foreach原理

    这篇随笔是对上一篇随笔C#关键字:yield的扩展. 关于foreach 首先,对于 foreach ,大家应该都非常熟悉,这里就简单的描述下. foreach 语句用于对实现  System.Col ...

  2. 开机报错 the connected AC adapter has a lower wattage than the recommended model which was shipped with the system。

    机型:联想Thinkpad T410 报错场景:在电脑插上电源充电情况下开机,会自动进入bios setup utility提示你需要重新设置日期时间.date/time 报错提示:The conne ...

  3. Mysql order by 排序 varchar 类型数据

    Mysql order by 排序 varchar 类型数据 varchar 类型字段排序,  会將数字当成字符串来处理.  排序规则一般是从左到右一位位来比较. +0之后 就转化成INT 类型排序 ...

  4. springboot 2.0 Redis command timed out的解决

    环境:springboot 2.0.7 spring data redis springboot从1.x升级到2.x后,spring data redis使用的redis客户端驱动从1.x的jedis ...

  5. iOS-浅谈runtime运行时机制02-runtime简单使用

    http://blog.csdn.net/jiajiayouba/article/details/44201079 由于OC是运行时语言,只有在程序运行时,才会去确定对象的类型,并调用类与对象相应的方 ...

  6. JavaScript_9_循环

    1. JavaScript for/in 语句循环遍历对象的属性: 可以遍历数组,也可以遍历一个对象的所有属性 <body> <p>点击按钮,循环遍历对象“person”的属性 ...

  7. last命令

    last——列出目前与过去登入系统的用户信息 命令所在路径:/usr/bin/last 示例1: $ last

  8. Angularjs 列表页面筛选

    个人博客链接:http://blog.yangqiong.com.cn/angularjs-lie-biao-ye-mian-shai-xuan/ 需求:页面URL和查询结果保持一致,当筛选条件变化时 ...

  9. Android(java)学习笔记132:eclipse 导入项目是提示:某些项目因位于工作空间目录中而被隐藏。

    导致这个错误的原因是工程重名了: 并不是仅仅指文件夹重名,相信很多人也曾经修改过文件夹的名称,可惜没什么用处,关键是修改工程里面的一个文件! 也就是.project这个文件! 用记事本打开,修改一下& ...

  10. 八数码问题(一) 暴力BFS + STL

    八数码问题是一个经典的人工智能问题.具体问题不累述了. 思路:由于存在多组测试数据,可以考虑“打表法“.所谓打表法,即枚举所有的初始情况,记录其到达终点的路径.而在这个题目中,顺序打表会调用很多次BF ...