原创 STM32 IAR工程->Keil MDK转换详解

2008-7-25 20:03 3889 6 11 分类: MCU/ 嵌入式

   


   我在STM32的学习中发现,大部分的STM32示例程序都是基于IAR开发环境的,但我认为使用Keil MDK开发环境更加方便,可以利用RVMDK强大的外设仿真功能加速STM32的开发。我在以前的Blog文章里介绍过如何在RVMDK中建立STM32工程,以及如何使用RVMDK的软件仿真功能,下面我将详细说明怎样将已有的IAR工程移植到RVMDK


<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 


       不管是IAR还是RVMDK,编程时使用的都是STM32的固件函数库,唯一不同的是启动文件。RVMDK在建立STM32工程时会自动创建启动文件STM<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />32F10x.s,而IAR使用的启动文件是cortexm3_macro.s。此外,两者对中断向量表的管理也不一样。


 


       在移植STM32工程时首先要检查IAR工程中是否使用了中断。方法是要看工程中stm32f10x_it.c文件内的各中断函数是否为空函数,中断函数为空说明没有使用中断;否则若中断函数有修改并且在main函数中对NVIC进行了设置,则说明使用了中断。


 


       下面分没有使用中断和使用了中断这两种情况分别介绍移植方法。


      


无中断:


       没使用中断时的移植较为简单,此时还可以使用RVMDK自动创建的启动文件STM32F10x.s,只要把IAR工程project文件夹中的stm32f10x_conf.hstm32f10x_it.cstm32f10x_it.hmain.c等文件复制到建立好的RVMDK工程文件夹下,然后为RVMDK工程添加使用到的库函数文件即可。


 


有中断:


       如果IAR工程中使用了NVIC时,在RVMDK下就不能再使用自动生成的STM32F10x.s启动文件了,但可以用IAR工程中的启动文件cortexm3_macro.sstm32f10x_vector.s来替换。下面以万利EK-STM32F开发板提供的ADCDemo为例,介绍如何将IAR工程移植到RVMDK。由于在ADCDemo中使用到了TIM2_IRQHandler,需要在RVMDK中作以下修改:


 


       第一步、在RVMDK中建立工程,命名为ADC_MDK;然后将启动文件cortexm3_macro.sstm32f10x_vector.s复制到建立好的ADC_MDK工程文件夹下,并在ADC_MDK工程中将RVMDK自动建立的启动文件STM32F10x.s删除,用以上两个文件替换。


      


       第二步、将ADCDemo IAR工程project文件夹中的lcd.clcd.hstm32f10x_conf.hstm32f10x_it.cstm32f10x_it.hmain.c文件复制到ADC_MDK工程文件夹内。


65c72043-cc93-47c2-8a1f-2cec9cc40359.jpg


 


       第三步、为ADC_MDK工程添加使用到的库函数文件,然后进行编译。


      


       最后的工程目录:


ae582858-b71c-4398-8731-f3d70613c951.jpg


      


       cortexm3_macro.sstm32f10x_vector.s启动文件:


      


rar


      


       只需以上三步,不用改动任何代码就能搞定IAR工程的移植!只要掌握了将IAR工程移植到Keil MDK中的方法,就可以利用现有的大量IAR STM32示例来加快在RVMDK中的开发。

PARTNER CONTENT

文章评论5条评论)

登录后参与讨论

tengjingshu_112148725 2009-4-2 22:39

哈哈,我也试过,改了文章,博客精华就没了,它应该算重新选博客精华吧

用户1273866 2009-3-2 19:31

这个附件很贴心啊~

用户1113894 2008-7-30 09:27

哈哈!成语用的很恰当!

用户1560991 2008-7-27 15:59

晕,改了几个字,博客精华没了,真是画蛇添足!

用户158184 2008-7-27 15:35

好文,谢谢!

用户1235095 2008-6-29 16:52

欢迎来访! 可以交流一下。 QQ:634593331

用户1048319 2008-5-28 11:48

你的方法并不好,很多设备的红外检测很苛刻,好的办法是记录全波形并记录载波,还有你说的每一位去存储不可行,实验证明这是可行的,我在128字节的单片机上做过实验,电视,DVD的波形最长的波形可以记录两帧,空调的码比较长,但两帧是重复的,就是说可以记录一帧,这还是记录在ram中的,转存到E2中可以选择在帧结束时存储,时间完全够了,我做的红外学习可将有效数据存在E2里,并归类分析纠错,这个算法也不复杂,你说的万能遥控器只能学习几种,我所见到的并非这样,一般来说都能学习最少30几种,对其中的一两种进行分析处理的,这一两种比较特殊,必须要处理的,欢迎进行交流。 www.flymcu.com czzhouyun@hotmail.com
相关推荐阅读
用户1560991 2008-12-10 19:55
最简单的C#入门教程
从网上找到的C#学习的好资料! 关于作者:Aisha Ikram        我现在在英国一家软件公司任技术带头人。我是计算机科学的硕士。我主要使用 .NET 1.1/2.0, C#, VB.NET...
用户1560991 2008-12-08 22:40
在C#中加载自己编写的动态链接库(转贴)
        本文主要讲述如何在C#中逐步实现加载自己用C++语言编写的动态链接库,以及在导入时如何进行C#和C++语言的数据类型匹配。 一、发生的背景         在开发新项目中使用了新的语言...
用户1560991 2008-12-08 10:25
新的学习方向
        最近的生活总算恢复正常了,可以静下心来学点东西了!新的学习方向是VC#,以前俺用的是VC++ 6.0,最近看到同学在用VC# 2005,很好很强大,支持快速开发。于是俺就想学学,以后用...
用户1560991 2008-08-08 11:04
基于STM32和nRF905的无线数传系统_软件篇
              STM32与nRF905模块间的电路连好后,剩下的工作就是编写程序了。都说STM32的固件库难用,但俺觉得从中可以学到不少东西,尤其是模块化编程的思想。STM32的固件库将...
用户1560991 2008-08-05 12:58
基于STM32和nRF905的无线数传系统_硬件篇
最近搞到一对nRF905无线模块,迫不及待的拿出来给大伙瞧瞧。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:...
用户1560991 2008-08-03 20:31
STM32精确延时的实现方法
前面用STM32的GPIO模拟液晶驱动时序时遇到一个问题,就是怎样产生一段较为精确的延时。通常产生一小段延时的方法就是利用一个递增或者递减循环进行软件延时。<?xml:namespace pre...
EE直播间
更多
我要评论
5
6
关闭 站长推荐上一条 /3 下一条