关于把keil上的工程移植到IAR上

本文介绍了如何将基于STM32的Keil工程成功移植到IAR环境中。首先,创建工程目录并复制相关文件,然后在IAR中新建工作区和项目,将文件分配到相应组。接着,配置IAR工程,包括选择目标设备、设置C/C++编译器的预处理器选项,添加头文件路径。最后,解决预包含头文件的问题,确保编译无误。

尝试了几次把STM 的keil工程移植到IAR,还好都成功了,这里把移植过程中需要注意的地方记下。。。

第一步肯定是先建一个工程文件夹PWM,然后文件夹里面在建几个子文件夹:user、inc、startup 基本也就这三个。当然,还得STM的官方库目录拷贝过来,于是工程目录下就有四个文件夹(其实建几个都是随意的,按着习惯来就行,也可以对于着keil的工程来建对应的文件夹)。

第二步就该把keil工程里面的文件copy到刚才建的工程目录里面了,我是把  *.c文件都放在user目录下,*.h文件都放在inc目录下,然后把startup汇编文件放在startup目录下(其实这文件是放在官方库目录下的,所以呢这个startup目录也可以不建)。

第三步启动IAR,IAR有个workspace,这个没具体研究,我只是file->new->workspace 然后 project->create new project 工程当然指定到刚才建的那个工程目录里去。然后对应的添加几个Group  , user、inc、startup ......接着往里面add files

第四步就该设置IAR工程了,上几张图先(表示一下不满。。。试了几次居然没法上传!!!那就算了吧)。设置呢主要就是General Options 的target那里选一下对应的Device 比如我就选了STM32F407ZG   再次就是C/C++ Compiler  下的Preprocessor 选项 有个Additional include directories 这里面呢就把头文件路径写进去就ok了,不过呢要以$PROJ_DIR$ 开头(其实这就是将当前路径设置为工程目录,也就是刚才第三步保存工程时指定的目录...\PWM),比如我刚才建的工程,头文件我都放在了inc目录下,于是我就这么写  $PROJ_DIR$\inc  (假设刚才多建了一个project目录,并且第三步的时候把工程保存到了这个目录下,那么这时候$PROJ_DIR$就是\PWM\project目录,于是头文件路径就得稍做修改了,inc目录和project目录处于同一级目录,所以应该这

STM32keil开发环境移植IAR开发环境,分为六步走。 首先安装IAR编译环境,这个自行安装。 第一步 新建文件夹 新建一个文件夹命名“LED_CTRL”,在这个文件夹下再建立三个文件夹, CMSISI:放系统启动相关文件 ,FWLIB:放库文件 USER.:放用户自己写的文件 如下图: 第二步 拷贝文件 在keil下其实也有相对应的文件,我么们考过来就可以了。 下图是keil工程下的文件: 下面我们开始拷贝: 1. 拷贝CMSIS文件 2. 拷贝FWLIB文件 3. 拷贝USER文件 4. 拷贝剩余的其他用户自己写的程序(其实这些文件放哪都可以,根据自己的习惯吧) 拷贝完成如下图: 第三步 新建工程 打开软件 新建工程 点击OK 命名led_temp保存到LED_CTRL下 然后就会得到下面的界面。 第四步 添加分组及文件 开始往工程中添加文件 1. 新建分组:add group 好了,分组完成。 2.添加文件 a.往CMSIS添加文件:system_stm32f10x.c、startup_stm32f10x_md.s CMSIS->add->add files 路径如下: b.往FWLIB添加文件:"stm32f10x_gpio.c" "stm32f10x_rcc.c" "stm32f10x_spi.c" "stm32f10x_usart.c",(这里是因为工程中使用到了一部分的外围,所以需要自己根据工程需求添加) c.往USER中添加: "stm32f10x_it.c" "main.c",另外还有其他的用户自己写的文件led.c、nrf24l01.c、uart.c 。 到此,文件添加完成。 第五步 配置工程 同样选中“led_temp”然后右键,选择Options.就会出现配置界面,如下图 。 a. 选择工程使用的芯片型号,stm32f103c8t6,这里自己根据自己设置哦。 b.Library Configuration的Library要设置为Full,这样才能使用printf(); b. 进入C/C++Compiler,添加文件路径和所需的宏定义。 到此路径添加完成,下面添加宏定义。 不记得的,可以打开芯片的头文件查找即可。 到此,宏定义添加完成。 c. 进入Linker配置链接文件,点击进入,在IAR环境中已经存在,你选择和自己芯片匹配的就好了。 d. 进入Debugger配置,选择自己程序的下载方式。 选择下载到flash 到此,工程配置完成。 第六步 编译工程 同样选中”led_temp”右键-》Rebuild all 弹出文件名设置 同样设置为“led_temp”点击保存。 第六步 解决编译错误问题 弹出好多的错误: 解决办法: 1.core_cm3.h重命名为core_cm3.h.old 再次编译: 出现错误: 解决办法:继续进入工程配置,General Options->Library Configuration:Library 选FULL,右下角选择Use CMSIS 我们会看到,错误已经没有了,但是有很多的警告,如下图 解决办法:startup_stm32f10x_md.s文件中的”SECTION .text:CODE:REORDER”都要改为“SECTION .text:CODE: NOROOT:REORDER” 方法很简单,用Notepad++打开然进行替换即可。 首先,要去掉文件的只读模式,然后在修改。 好了,全部修改完成。保存,并恢复为只读模式,然后再编译工程工程编译结果无错误,无警告,移植到此结束,完美。 。
### 将Keil项目迁移至IAR或其他开发环境 #### 迁移概述 为了将基于STM32F103C8的项目Keil MDK开发环境成功迁移到IAR Workbench环境,需要理解两个环境中配置文件的不同之处以及如何处理这些差异[^1]。 #### 准备工作 确保已经安装并设置了最新的IAR Embedded Workbench for ARM版本。同时准备好原始的Keil项目文件夹及其所有源代码文件。对于某些特定硬件外设的支持库可能也需要单独下载和集成到新的IAR项目中[^3]。 #### 创建新项目 启动IAR EWARM后创建一个新的Workspace,在弹出对话框里选择对应的目标MCU型号(如STM32F103C8)。接着按照提示逐步完成新建项目的向导设置过程,包括指定输出目录、调试接口等参数。 #### 添加现有源码 在IAR Project Manager窗口内右键点击“Add Group”,为不同的功能模块建立分组;再分别往各组里面加入相应的.c/.h文件。注意保持原有的包结构以便于维护和管理。 #### 配置编译器选项 进入Project->Options菜单项下调整各类编译链接属性: - **General Options**: 设置目标芯片系列和其他基本信息; -D),包含路径(-I)及其他优化级别; - **Linker**: 修改映射文件(.icf), 插入额外的库依赖关系; - **Debugger**: 如果适用的话挑选合适的仿真器类型[^4]。 #### 调整启动脚本与中断向量表 根据所选微控制器的数据手册编写适合IAR平台使用的startup.s汇编程序片段,并更新vector table位置指向正确入口地址。这部分改动通常涉及修改内存布局描述文件(*.icf)。 #### 测试验证 最后一步是对转换后的应用程序进行全面的功能测试,确认其行为表现同原版一致无误。这期间可能会遇到一些细微差别引起的错误,比如寄存器访问方式的变化或是标准函数实现上的出入等问题都需要逐一排查修正[^2]。 ```c // 示例:简单的LED闪烁程序部分移植代码 #include "stm32f1xx_hal.h" int main(void){ HAL_Init(); __HAL_RCC_GPIOA_CLK_ENABLE(); // 开启GPIOA时钟 GPIO_InitTypeDef GPIO_InitStruct = {0}; /* Configure PA5 as output push-pull */ GPIO_InitStruct.Pin = GPIO_PIN_5; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); while (1){ HAL_Delay(500); // 延迟500ms HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5); // 切换PA5电平状态 } } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值