原创 自己动手创建一个基于万利STM32板的IAR工程

2008-7-2 14:59 8642 9 26 分类: MCU/ 嵌入式

    圈圈前面几个STM32的程序是直接拿例子来改的,但
我们总不能每次都拿别人的例子来改吧?我们要学会如何
自己来创建一个属于自己的IAR工程。


    首先启动IAR开发环境。如果你的设置是在启动时出现
Embedded Workbench Startup对话框,那么可以直接
在这个对话框中点击第一个按钮——Create new project
in current workspace。如果你选择了启动不出现这个对话
框,那么你可以在IAR的菜单栏中找到Project菜单,在其子
菜单中有一个“Create new project...”。点击之后会出现
创建新工程的对话框,Tool chain选择ARM,Project templates
我们选择Empty project,然后点击OK。这时会弹出保存工程
的对话框,随便些个工程名,例如MyTestProject,点击保存。
这时一个空的工程就创建好了,接下来我们对工程的选项进行
设置。


    在Workspace窗口中,右击MyTestProject,在弹出的菜
单中选择Options,这时就打开了工程选项。在第一项General
Options中,选择Target标签页。在Processor variant分组中
单击Device单选按钮,然后单击Device右边的器件选择按钮,
在弹出的菜单中选择ST菜单中的ST STM32F10x。Endian mode
选择为Little,即小端模式。Stack align选择为4字节。
Output标签页使用默认设置就可以了,不用动。Library
Configuration标签页中的Library选择为Full。Library options
和MISRA C标签页不用动,使用默认即可。


    再切换到C/C++ Compiler分类,选择Language标签页,
Language我们选择为C,并将Require prototypes勾上,
在Language conformace分组中选择Relaxed ISO/ANSI。其他
几个标签页可以不用修改。


    然后再切换到Linker分类,在Output标签页中,在Format
分组中将Allow C-SPY-specific extra的复选框勾上。再切换
到Extra Output标签页,将Generate extra output file勾上。
再切换到Config标签页,在Linker command file分组中将
Override default勾上,这时有个默认的lnkarm.xcl文件,它
位于IAR的安装目录\IAR Systems\Embedded Workbench 4.0
Kickstart\arm\config下。点击旁边的浏览文件的按钮,找到
这个默认的lnkarm.xcl文件,然后复制一份到我们的工程目录
MyTestProject下。然后在Override default下面的框中写入
路径$PROJ_DIR$\lnkarm.xcl,这将使用我们工程目录下的链
接文件。但是这个链接文件还是不行的,需要做一下修改。
用记事本打开我们刚刚复制到工程目录下的lnkarm.xcl文件,
找到以下部分并修改(其中用//注释的是原来的):
//-DROMSTART=08000
//-DROMEND=FFFFF
-DROMSTART=0x8000000
-DROMEND=0x801FFFF
//-DRAMSTART=100000
//-DRAMEND=7FFFFF
-DRAMSTART=0x20000000
-DRAMEND=0x20004FFF
//-Z(CODE)INTVEC=00-3F
-Z(CODE)INTVEC=ROMSTART-ROMEND
//-D_CSTACK_SIZE=2000
-D_CSTACK_SIZE=800
//-D_HEAP_SIZE=8000
-D_HEAP_SIZE=400


    再切换到Debugger分类,在Setup标签页中,Driver选择
Third-Party Driver。在Download标签页中,将Use flash
loader勾上。


    然后在切换到最下面的Third-Party Driver分类,以选择
调试器的驱动。在IAR debugger driver下的文本框中输入驱动
的路径,一般是C:\Manley\drivers\STLink\STM32Driver.dll,
这要看你的STLink驱动装在哪了,指定到安装的路径即可。


    至此,我们的工程选项就设置完了。接下来我们写个流水
灯的程序。要控制LED亮,就需要将对应的IO口设置为输出口,
并控制IO口的输出电平。通过查看万利STM32板的原理图,我们
4个LED是分别接在PORTC的4、5、6、7这4个引脚上的,高电平
时将点亮LED。


    首先我们要将IO口设置为输出模式,查看STM32F103的数据
手册,是通过GPIOx_CRL和GPIOx_CRH寄存器来选择模式的。
我们要设置PORTC口的4、5、6、7位,那么就应该使用GPIOC_CRL
寄存器,它的地址为0x40011000。我们将这4个IO口设置为50MHz
的推挽输出模式,具体的代码见后面。然后,我们就可以对IO
口的高低电平进行控制了,这通过端口置1和清0寄存器来控制,
即寄存器GPIOx_BSRR寄存器和GPIOx_BRR寄存器。GPIOx_BSRR
寄存器可以同时置1和清0,高16位是用来清0的,低16位是用来
置1的。如果置1和清0位被同时设置,那么置1的优先级高。
由于我们这里是控制LED的,对操作要求不严格,所以我们不
使用BSRR寄存器的高16位,而用GPIOx_BRR寄存器来清0。
GPIOC_BSRR和GPIOC_BRR的地址分别为0x40011010和0x40011014。
另外,我们还需要启动PORTC的时钟,才能让端口工作起来。
启动PORTC时钟的控制在RCC_APB2ENR寄存器中,其中Bit4控制
PROTC的时钟,该位为1时时钟使能。RCC_APB2ENR的地址为
0x4002 1018。


    最终,我们写出的流水灯程序入下所示。点击创建新文本
文件的图标,建立一个新的源文件。然后将以下代码复制进去:


#define GPIOC_CRL   (*((unsigned int *)(0x40011000)))
#define GPIOC_BSRR  (*((unsigned int *)(0x40011010)))
#define GPIOC_BRR   (*((unsigned int *)(0x40011014)))
#define RCC_APB2ENR (*((unsigned int *)(0x40021018)))


void Delay(void)//延时函数,流水灯显示用
{
 unsigned int i;
 for(i=0;i<0xFFFFF;i++);
}


void main(void)
{
 //使能PORTC时钟
 RCC_APB2ENR |=(1<<4);
 //将GPIOC_CRL高16位都清0
 //这样CNF为00,即选择为推挽输出模式
 GPIOC_CRL &= 0x0000FFFF;
 //MODE选择为11,即50MHz输出模式
 GPIOC_CRL |= 0x33330000;
 
 while(1)
 {
  GPIOC_BRR=(1<<4); //灭 LED5
  GPIOC_BSRR=(1<<7);//亮 LED2
  Delay();
  GPIOC_BRR=(1<<7); //灭 LED2
  GPIOC_BSRR=(1<<6);//亮 LED3
  Delay();
  GPIOC_BRR=(1<<6); //灭 LED3
  GPIOC_BSRR=(1<<5);//亮 LED4
  Delay();
  GPIOC_BRR=(1<<5); //灭 LED4 
  GPIOC_BSRR=(1<<4);//亮 LED5
  Delay();
 }
}


   然后将其保存为main.c文件。再在Workspace窗口中,
右击MyTestProject,在弹出的菜单中选择“Add”→“Add
Files...”,然后将我们刚刚保存的main.c文件增加进去。
然后编译,点击开始调试,等下载完成后,全速运行,就
可以看到流水灯跑起来了~~~~~


   如果你需要产生一个HEX文件然后通过ISP下载来运行,
那么还需要在我们刚刚的lnkarm.xcl文件最后加入一行:
-Ointel-extended,(CODE)=.hex
这样就会在工程目录的Debug\Exe下产生一个HEX文件。
当然,具体是在Debug目录还是Release目录,就要看你
当前选择编译模式了。


   当然,上面这个工程只是一个非常简单的例子,在实际
的工程中,我们还有更多、更复杂的事情要做,例如各种
时钟的初始化、中断初始化等等。这些就需要靠大家自己
去看资料学习了,圈圈也只能是爱莫能助。ST提供的库包
含了很多已经写好了的代码,大家可以直接使用,以减少
编程的工作量。


     看完了?记得给圈圈顶一下~~~就在左上角那里~~~点一


下那个“顶一下”按钮~~~谢谢。


 


 

PARTNER CONTENT

文章评论19条评论)

登录后参与讨论

用户377235 2013-5-25 10:50

这个必须顶!

用户377235 2013-4-10 17:50

谢谢大侠

用户236914 2011-6-27 12:45

00能不能把你的iar for arm 4.42版本发一个给我,谢谢呀,我的邮箱是mailbowang@163.com

用户232263 2009-10-27 08:59

请您把这些设置步骤解释一下吧!我是个初学者,谢谢了

用户215882 2009-7-13 21:57

怎么下载啊,楼主,急

computer00 2009-4-9 01:44

我用的是199元的万利板啊。用的IAR编译器。其实用什么编译器都一样啊。都是C语言的。

用户187751 2009-4-8 20:52

我想说:为什么您用的不是199元的万利+ MDK编译器?? 如果是就好了,如果你用的是的话,我早就入门了!!!

用户5562 2008-12-11 13:08

谢谢你的小程序!其实弄懂小程序,足以弄明白整个芯片!

用户104264 2008-10-18 23:33

谢谢! 如果在工程新建过程中,那些选项设置的“勾选”项进行简要的说明(为什么勾选那些设置)那就更完美了,嘿嘿……

computer00 2008-10-3 09:55

自己在前面声明一下delay这个函数。IAR编译器可以设置,必须要函数声明,否则就算错误。
相关推荐阅读
computer00 2013-06-05 16:27
[招聘]Android系统开发工程师
任职要求: 1. 扎实的C/C++基础,熟悉嵌入式Linux和Android操作系统的软件开发; 2. 良好的沟通能力和逻辑思维能力; 3. 良好的英文文献阅读能力; 4. 具备...
computer00 2013-06-04 09:26
[招聘]Android应用开发工程师
任职要求: 1. 具备扎实的面向对象编程思想和JAVA编程基础; 2. 熟悉Eclipse+ADT开发环境,熟练掌握Android基本类库; 3. 熟悉网络应用和多媒体应用开发; ...
computer00 2012-09-26 13:15
圈圈的新浪官方围脖
http://weibo.com/computer00  ...
computer00 2012-09-26 13:12
欢迎大家去收听圈圈弹的曲子
http://www.tudou.com/home/_105209016  ...
computer00 2009-06-29 15:07
《圈圈教你玩USB》勘误(更新日期2009 年06月29日)
《圈圈教你玩USB》勘误(更新日期2009 年06月29日)下载地址1:下载地址2: 勘误.pdf...
computer00 2009-06-25 11:23
一块磐正845GE主板PS2接口的修复
圈圈有一部台式机,某天开机时,发现键盘用不了了,停留在输入BIOS密码那里。主机自检通过,但是蜂鸣器却发出很微弱的、连续的声音,同时键盘的三个LED也没有出现象往常一样的闪烁一下。圈圈以为多日未用,积...
EE直播间
更多
我要评论
19
9
关闭 站长推荐上一条 /3 下一条