keil5工程移植到IAR工程

一、 软件版本

MDK-ARM Professional  Version: 5.14.0.0

IAR 8.1

移植工程:基于正点原子开发板建立的STM32F407ZGT6工程

二、 开始建立IAR对应工程

1、 keil5例程结构如下:

2、 建立对应的IAR工程:

参考链接:https://blog.csdn.net/Q_fighting/article/details/89429962

3、 建立好的对应IAR工程如下:

可以看到,基本按照MDK中的结构建立了对应的IAR工程

三、 修改对应的文件(重点)

1、 修改startup_stm32f40_41xxx.s文件,由于IAR中使用的是自己的启动文件,所以先要找到对应的文件进行代替。在固件库的此路径下:

\STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates\iar

2、修改sys.c文件

IAR中的汇编引用于MDK中是不一样的,移植时务必注意,这也就导致了无法同时很好支持两个编译器,只能做不同的版本了。修改后的代码如下:

#include "sys.h"

//////////////////////////////////////////////////////////////////////////////////

//本程序只供学习使用,未经作者许可,不得用于其它任何用途

//ALIENTEK STM32F407开发板

//系统时钟初始化

//包括时钟设置/中断管理/GPIO设置等

//正点原子@ALIENTEK

//技术论坛:www.openedv.com

//创建日期:2014/5/2

//版本:V1.0

//版权所有,盗版必究。

//Copyright(C) 广州市星翼电子科技有限公司 2014-2024

//All rights reserved

//********************************************************************************

//修改说明

//无

//////////////////////////////////////////////////////////////////////////////////

//THUMB指令不支持汇编内联

//采用如下方法实现执行汇编指令WFI

#if defined ( __ICCARM__ )  //IAR下使用

void WFI_SET(void)

{

asm("WFI");

}

//关闭所有中断(但是不包括fault和NMI中断)

void INTX_DISABLE(void)

{

asm("CPSID   I");

asm("BX      LR");

}

//开启所有中断

void INTX_ENABLE(void)

{

asm("CPSIE   I");

asm("BX      LR");

}

//设置栈顶地址

//addr:栈顶地址

void MSR_MSP(u32 addr)

{

asm("MSR MSP, r0");    //set Main Stack value

asm("BX r14");

}

#else

__asm void WFI_SET(void)

{

WFI;

}

//关闭所有中断(但是不包括fault和NMI中断)

__asm void INTX_DISABLE(void)

{

CPSID   I

BX      LR

}

//开启所有中断

__asm void INTX_ENABLE(void)

{

CPSIE   I

BX      LR

}

//设置栈顶地址

//addr:栈顶地址

__asm void MSR_MSP(u32 addr)

{

MSR MSP, r0                      //set Main Stack value

BX r14

}

#endif

3、修改usart.c

主要修改部分如下:

////////////////////////////////////////////////////////////////// //加入以下代码,支持printf函数,而不需要选择use MicroLIB

#if defined ( __ICCARM__ )  //IAR下使用

//重定义fputc函数

int fputc(int ch, FILE *f)

{

while((USART1->SR&0X40)==0);//循环发送,直到发送完毕

USART1->DR = (u8) ch;

return ch;

}

#else  //非IAR下使用

#pragma import(__use_no_semihosting)

//标准库需要的支持函数

struct __FILE {  int handle; };

FILE __stdout;

//定义_sys_exit()以避免使用半主机模式

_sys_exit(int x)

{

x = x;

}

//重定义fputc函数

int fputc(int ch, FILE *f)

{

while((USART1->SR&0X40)==0);//循环发送,直到发送完毕

USART1->DR = (u8) ch;

return ch;

} #endif

4、 修改相关工程设置

keil5工程移植到IAR工程的更多相关文章

  1. 在IAR下移植CC2650 contiki工程

    与Instant Contiki相比,在Windows的IAR下开发可以在线仿真,下载也更方便,因此我想把BLEach的工程移植到IAR下.弄了好几天总算编译并且下载成功了,参考了[这篇TI的wiki ...

  2. [MFC] VS2013版本MFC工程移植到VC6.0上

    :VS虽号称“宇宙最强IDE”,但是有时候安装包太大,动不动就几个G:而且安装好之后也会多出很多几乎很难用到的部分,这对于那些处女座的人如何忍受!本文不是吐槽,而是给出一种在应急场景下,不用安装新版本 ...

  3. 通过IAR工程文件查看对应IAR版本号

    IAR使用技巧——如何使用合适的版本打开IAR工程 2014年07月05日 23:49:08 xukai871105 阅读数:12895 标签: IAR 更多 个人分类: 嵌入式ARM   0.前言 ...

  4. S04_CH02_工程移植ubuntu并一键制作启动盘

    S04_CH02_工程移植ubuntu并一键制作启动盘 2.1概述 2.2搭建硬件系统 本章硬件工程还是使用<S04_CH01_搭建工程移植LINUX/测试EMMC/VGA>所搭建的VIV ...

  5. S04_CH01_搭建工程移植LINUX/测试EMMC/VGA

    S04_CH01_搭建工程移植LINUX/测试EMMC/VGA 1.1概述: 本章内容是在已经提供安装了VIVADO2015.4 的ubuntu系统下,进行.大家可以下周我们已经提供的虚拟机镜像,我们 ...

  6. STCubeMX软件新建Keil和IAR工程使用步骤:

    STCubeMX软件新建Keil和IAR工程使用步骤:首先是软件下载(也可在我们的百度云下载):1.STCubeMX下载地址:    http://www.stmicroelectronics.co ...

  7. 痞子衡嵌入式:探析开启CRC完整性校验的IAR工程生成.out和.bin文件先后顺序

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是开启CRC完整性校验的IAR工程生成.out和.bin文件先后顺序问题. 痞子衡之前写了一篇 <在IAR开发环境下为工程开启CRC ...

  8. My安卓知识6--关于把项目从androidstudio工程转成eclipse工程并导成jar包

    是这样,我在我的android项目中想实现zxing也就是二维码的一些功能,但是需要的一个源码工程是androidstudio工程,想把这个工程转成eclipse工程并导成jar包在我的项目中使用. ...

  9. Android一个工程引用另一个工程的方法

    一个工程包含另一个工程.相当于一个jar包的引用.但又不是jar包反而像个package 现在已经有了一个Android工程A.我们想扩展A的功能,但是不想在A的基础上做开发,于是新建了另外一个And ...

随机推荐

  1. C# redis客户端帮助类

    需要在NuGet里面引用ServiceStack.Redis using ServiceStack.Redis; using ServiceStack.Redis.Generic; using Sys ...

  2. Python3基础 函数 __name__ 得到引用所指向的真正名字

             Python : 3.7.3          OS : Ubuntu 18.04.2 LTS         IDE : pycharm-community-2019.1.3    ...

  3. 系统重装之认识UEFI

    UEFI是一种新型的引导方式?他与传统的BIOS引导不同,传统BIOS引导需要经过(开机→BIOS初始化→BIOS自检→引导系统→进入系统)五个步骤来完成引导操作,UEFI只需要(开机→UEFI初始化 ...

  4. 【前端】input输入框只能输入大于等于0的正数

    大于等于0的正数,允许小数 <input type="number" step="1" min="0" onkeyup="t ...

  5. 一秒解决CentOS下service 功能 不能使用 bash: service: command not found

    首先检查自己是否 使用的是root用户 如果是并且还不能用-----执行以下操作 在centos系统中,如果/sbin目录下没有service这个命令,就会出现 bash: service: comm ...

  6. 报错:sqoop2执行job时:Exception: Job Failed with status:3

    报错背景: 创建完成sqoop2的一个job,主要功能是将数据从hdfs存到mysql数据库中. 执行job的时候发生报错. 报错现象: sqoop:> start job -j -s Subm ...

  7. linux查找文件利器

    查找文件 比如:找nginx.conf配置文件 locate nginx.conf /usr/local/etc/nginx/nginx.conf /usr/local/etc/nginx/nginx ...

  8. python测试工具nosetests

    今天在github上找东西,找到个工具是python写的,但是需要安装nosetests,因此了解了下nosetests python除了unittest,还有nosetests,使用更快捷 nose ...

  9. consul多数据中心搭建 【h】

    自建IDC后面简称own.阿里云机房ali.腾讯云机房txown机房:内网10.10.10.0/24,边界节点,10.10.10.100/101.xxx.80.xxxali机房:内网10.10.10. ...

  10. 【VS开发】MFC多显示器适配显示设置

    由于工程需要在多个显示器上显示不同类容,故查找了一些资料来满足这个功能.在VC中分为三步来操作:检测显示器个数:读取屏幕分辨率和其他参数:设置程序的显示坐标. 第一步:检测屏幕个数 网上查找到的通用方 ...