STM32F1标准库+FreeRTOS:从Keil到IAR的移植攻略

6 下载量 19 浏览量 更新于2024-08-31 收藏 309KB PDF 举报
"这篇教程介绍了如何将基于Keil的stm32F1标准库和FreeRTOS项目移植到IAR环境中。作者使用的硬件平台是stm32F103REt6,软件版本包括标准库V3.5.0和FreeRTOS V8.2.1。" 移植Keil工程到IAR的步骤如下: 1. **创建新工程**:首先,在IAR Workbench中创建一个新的工程,选择对应的stm32F103REt6芯片型号。 2. **配置目标设置**:右键点击项目名称,进入`options` -> `General Options` -> `Target`,选择正确的芯片型号。 3. **配置编译器**:在`options` -> `C/C++ Compiler` -> `Preprocessor`里,添加所有源代码文件夹的路径,并定义必要的宏,如`USE_STDPERIPH_DRIVER`和`STM32F10X_HD`(根据实际芯片选MD或HD)。 4. **配置汇编器**:在`Assembler` -> `Preprocessor`中,添加FreeRTOS配置头文件`FreeRtosConfig.h`的路径,以解决汇编文件的找不到文件错误。 5. **配置链接器**:在`linker`中,引入`.icf`文件,这是定义芯片内存空间分配的关键文件。这个文件通常可以从STM32的标准库中找到,例如在STM32F10x_StdPeriph_Lib_V3.5.0的相应目录下。 6. **FreeRTOS文件移植**:复制FreeRTOS的所有相关文件到IAR工程中。注意,由于`port.c`文件包含了平台特定的实现,Keil和IAR的版本可能有所不同,这可能导致编译错误。因此,需要确保使用适用于IAR的`port.c`版本,或者根据IAR的编译环境适当地修改移植过来的文件。 在进行移植时,可能会遇到的问题包括但不限于: - 不同编译器对宏定义、类型定义以及函数原型的理解差异,这可能导致编译错误或警告。 - IAR和Keil的中断向量表处理方式可能不同,需要检查并调整中断服务函数的定义和链接。 - 编译优化设置可能影响代码行为,需对比两者间的优化选项进行调整。 - IAR的库支持可能与Keil不同,例如HAL库的使用,可能需要转换为IAR的固件库或手动调整相关代码。 为了解决这些问题,开发者应仔细阅读IAR的用户手册和STM32的参考手册,理解编译器和RTOS的内部工作原理,同时参考IAR和FreeRTOS的官方文档来完成迁移过程。对于新手来说,这是一个学习和理解底层编程的好机会,但确实需要耐心和细致的工作。
2019-11-04 上传
从STM32的keil开发环境移植到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++打开然进行替换即可。 首先,要去掉文件的只读模式,然后在修改。 好了,全部修改完成。保存,并恢复为只读模式,然后再编译工程。 工程编译结果无错误,无警告,移植到此结束,完美。 。