Keil to STM32CubeIDE标准库移植

Keil to STM32CubeIDE标准库移植

一.新建CubeIDE空白工程

这里以个人使用的STM32F407为例,新建空白工程即不使用HAL库,上图
在这里插入图片描述

  • 注意选择Empty,然后Finish

在这里插入图片描述

  1. 建完可看到如图工程
    移植文件的时候无需再移植启动文件,目录结构发生变化时按F5刷新
    在这里插入图片描述

二.准备移植文件

2.1 工程对比

如果不跑系统也不使用ETH,那移植起来会简单很多,但我得跑啊!
先来看看新建工程和原Keil工程文件对比,左边是新建的CubeIDE工程,右边是Keil需要移植的工程。
在这里插入图片描述

2.2 移植文件

若不跑系统和ETH,可直接将原工程的.c/.h文件拷贝过来,但我要跑啊
来看看我拷贝完的目录结构。
FreeRTOS和LWIP我先整个文件拷过来了,等会在进行删改。
在这里插入图片描述
Core:包含个人用户代码和启动文件
在这里插入图片描述
Drivers:包含STM32的标准外设库文件和M4内核文件
在这里插入图片描述

2.3 如果你不需要跑系统和ETH可以跳过此部分

2.3.1FreeRTOS修改部分

先说FreeRTOS,因为STM32CubeIDE与Keil的引入.c和.h文件 不太相同,可能有FreeRTOS的部分文件未删除,以及port.c和portmacro.h文件 需要换成GCC编译器适用文件。
下面一步一步来

这里道理上讲只能留下一个,我用的是4,你对照你的。
在这里插入图片描述

  • 删除未使用的文件如图,灰色被杠掉的文件都是未使用的文件,留着也没用,删了吧。
    在这里插入图片描述

  • 修改port.c和portmacro.h文件,这里找到FreeRTOS源码,路径:\FreeRTOSv9.0.0\FreeRTOS\Source\portable\GCC\ARM_CM4F

  • 将这两个文件替换掉原来MDK下的同等文件
    9.0.0FreeRTOS源码
    在这里插入图片描述

2.3.2LWIP修改部分

小编移植的是1.4.1版本的LWIP文件,其他版本可能有所差异,理论上大同小异,借鉴为主。
因为之前使用keil的时候,是需要哪个C文件就添加哪个C文件,所以lwip这部分我有很多文件未删除。导致STM32CubeIDE编译时出现很多error

  • LWIP1.4.1文件内有几个ipv6的文件会与ipv4文件冲突需删除,现将截图和路径放在下面。
    \LWIP\lwip-1.4.1\port\STM32F4x7\FreeRTOS
    在这里插入图片描述

\LWIP\lwip-1.4.1\src\core\ipv6
\LWIP\lwip-1.4.1\src\core\snmp
在这里插入图片描述
\LWIP\lwip-1.4.1\src\include\ipv6
\LWIP\lwip-1.4.1\src\netif\ppp
\LWIP\lwip-1.4.1\test
在这里插入图片描述
当然你也可以不删除留着,添加.c路径时除去这些要删除的一条一条加进去,或者像我一样在CubeIDE软件内将这些文件禁止编译。

三.添加全局宏定义

添加全局宏定义可以直接从keil的魔术棒里复制粘贴过来
在这里插入图片描述
STM32CubeIDE添加位置:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

四.添加头文件路径

添加原则,工程里所有需要使用到的.h文件路径,不能只添加最外层,有个比较简单的办法,可直接对照着原keil的路径进行添加。
建议使用相对路径,以后比较好移植。
在这里插入图片描述

五.添加C文件路径

添加C文件路径可以直接将最外层文件添加进来,就包含了所有子文件夹的c文件,当然你也可以一条一条添加。

在这里插入图片描述
添加完后不要急着编译,先看看其他文件,可能会有中文乱码,可通过使用记事本打开乱码的文件,另存为,编码格式改为UTF-8
在这里插入图片描述
在这里插入图片描述
注:此方法只对于用IDE 打开是乱码,用记事本打开是中文的文件有效

六.移植注意事项

6.1 禁止编译文件

如果像我前面一样,有些文件不想删除,或者忘记删除,可通过软件设置禁止编译来代替删除功能吧!
右键点击文件/文件夹
在这里插入图片描述
勾选Debug和Release
在这里插入图片描述

6.2 printf打印改写

把 int fputc(int ch, FILE *f) 改为 int __io_putchar(int ch)
int __io_putchar(int ch)
{
while (!(USART1->SR & USART_FLAG_TXE));
USART_SendData(USART1, (unsigned char) ch);
return (ch);
}
STM32CubeIDE 使用printf打印时有个怪毛病,必须加上\r\n才能正常打印,如果不加上,它要等到内存满了才打印出来。

最后再说一句,如果原Keil工程没有error的情况下,在移植到CubeIDE过程中出现的error很大可能是你的路径没添加完,或是错误,导致有些文件出现冲突。本人在探索过程中看到error时会对代码进行修改,但都无济于事,所以源工程没问题的情况下不建议对代码进行修改。

  • 5
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值