STM32项目从Keil MDK迁移至STM32CubeIDE(不含LWIP和FreeRTOS)

STM32项目从Keil MDK迁移至STM32CubeIDE(不含LWIP和FreeRTOS)

Step1 打开STM32CubeIDE,新建空白STM32工程。File->New->STM32 Project,选择STM32F405RGT6,Next,按下图配置。

在这里插入图片描述

Step2 新建一个工程文件夹,从STM32CubeIDE的工作空间中将刚刚新建的空白工程文件全部复制出来,工作空间的地址即上一步图中“Location”指定的地址:C:\…\STM32CubeIDE\workspace_1.10.1\xxxProject

在这里插入图片描述

Step3 将原Keil工程中的Drivers文件夹复制出来,放入step2中新建的工程文件夹中。目录中保留如下内容,其他均删除。

在这里插入图片描述

其中CMSIS中保留的文件夹如下所示

在这里插入图片描述

Core中保留Include文件夹

Device中保留D:\…\Drivers\CMSIS\Device\ST\STM32F4xx\Include文件夹,清空D:\…\Drivers\CMSIS\Device\ST\STM32F4xx\Source\Templates文件夹。

在这里插入图片描述

DSP文件夹中只保留Include和Source文件夹。

在这里插入图片描述

标准HAL库文件夹全部保留

在这里插入图片描述

Step4 将原Keil工程中用户创建的业务程序代码,包含“.c“和”.h“的文件夹全部复制出来,放入step2新建的工程文件夹中。

Step5 在STM32CubeIDE中添加所有工程中使用到的头文件路径:菜单栏Project->Properties

在这里插入图片描述
在这里插入图片描述

Step6 在STM32CubeIDE中添加宏定义:菜单栏Project->Properties

在这里插入图片描述
在这里插入图片描述

图中的第5步非必须,__TARGET_FPU_VFP宏定义需要添加值为1。

以下两个宏定义必须添加

  • STM32F405xx

  • USE_HAL_DRIVER

使用math数学库和FPU进行计算时必须添加以下宏定义

  • __TARGET_FPU_VFP

  • ARM_MATH_MATRIX_CHECK

  • ARM_MATH_ROUNDING

  • ARM_MATH_CM4

  • __CC_ARM

其中__TARGET_FPU_VFP必须要设置值=1

Step7 勾选编译时生成Binary文件和Hex文件:菜单栏Project->Properties

在这里插入图片描述

注意事项

  • 编程时,if……else……语句,if和else应在竖直方向对齐,即在同一列,否则ARM GCC会报错。

  • __align(4) float temp[3]={0.0f,0.0f,0.0f};
    //这种语言ARM GCC会报错,应改为
    __attribute__ ((align(4))) float temp[3]={0.0f,0.0f,0.0f};
    //注意是两个括号包着align(4)
    
  • 在宏定义中添加Name=__FPU_PRESENT,Value=1之后需要将stm32f405xx.h中的宏定义注释掉,否则会编译时会一直报Warning:

    //#define __FPU_PRESENT    1U    /*!< FPU present*/
    
  • 由于STM32CubeIDE在创建空白工程时,已经创建了启动文件,保存在工程根目录的“Startup”文件夹内。因此需要将原Keil工程文件中的启动文件删除,该文件一般保存在D:\xxxProject\xxxProject_Cube\Drivers\CMSIS\Device\ST\STM32F4xx\Source\Templates下,清空该文件夹即可。

  • ARM GCC的__attribute__没有“at”属性,替代的是“section”,代码如下:

    //假设BKPSRAM_BB_BASE=0x42480000UL
    //在Keil中__attribute__可以使用at属性进行绝对地址定位
    uint8_t temp __attribute__((at(BKPSRAM_BB_BASE)));
    //在ARM GCC编译器下,__attribute__的at属性不被支持,需使用section属性
    uint8_t temp __attribute__((section(".ARM.__at_0x42480000")));
    //或者
    uint8_t temp __attribute__((__section__(".ARM.__at_0x42480000")));
    
  • 2
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值