你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

[复制链接]
incompletely 发布时间:2008-9-3 20:11
    圈圈前面几个STM32的程序是直接拿例子来改的,但我们总不能每次都拿别人的例子来改吧?我们要学会如何自己来创建一个属于自己的IAR工程。
   
    首先启动IAR开发环境。如果你的设置是在启动时出现Embedded Workbench Startup对话框,那么可以直接在这个对话框中点击第一个按钮——Create new projectin current workspace。如果你选择了启动不出现这个对话框,那么你可以在IAR的菜单栏中找到Project菜单,在其子菜单中有一个“Create new project...”。点击之后会出现创建新工程的对话框,Tool chain选择ARM,Project templates我们选择Empty project,然后点击OK。这时会弹出保存工程的对话框,随便些个工程名,例如MyTestProject,点击保存。这时一个空的工程就创建好了,接下来我们对工程的选项进行设置。
    在Workspace窗口中,右击MyTestProject,在弹出的菜单中选择Options,这时就打开了工程选项。在第一项GeneralOptions中,选择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.0Kickstart\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 flashloader勾上。
    然后在切换到最下面的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寄存器来控制,即寄存器PIOx_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
收藏 评论0 发布时间:2008-9-3 20:11

举报

0个回答

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版