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")));