STM32CubeMX + EIDE makefile gcc版 避坑指南(2025版)
声明
本系列文章禁止搬运/转载至CSDN, 禁止基于内容衍生的任何收费行为!!! 请各位遵守开源免费之精神.
0.前言
在文章前, 为避免存在信息差和认知壁垒; 我先简单科普一下 keil5 在嵌入式开发中的底层逻辑,便于大家理解为什么要搞这么多操作去实现一个工程开发.(当然, 你也可以直接跳过, 直接看正文)正所谓, 天下苦keil5久矣.....
0.1. 真正的开发框架
相信, 每一个从学校入门同学仔都是从老师或者师兄之类的人那里拿到了第一份不知道怎么配置的空项目工程然后再开始搓对应的代码以入门的. 新一点的朋友可能是从stm32cubeMX这种自动生成工程后再去写应用代码的. 这样的好处是快速入门 免去一些底层配置的麻烦, 但是缺点也很明显, 那就是对于底层逻辑不清晰, 也不利于后续的深入学习.
事实上 对于嵌入式软件开发来说. 开发都是一个一个模块拆分实现然后集合到一起才是完整的项目工程.
其中 可以简单划分为 : 编辑器 + 编译器 + 链接器 + 调试器 + 烧录器. 这几个部分.
0.2 编辑器
想必你或多或少都听说过或者用过 VSCODE 这款软件, 这个其实就是编辑器. 其本质跟记事本一样. 就是为了方便你去编写代码的. 作为一个用过 各种方案开发嵌入式的玩家来说,EIDE算是现在最nice的适配方案了. 并且 VSCODE 和EIDE 本身都是开源的! 你大可不必担心律师函.
0.3 编译器
编译器 就是翻译官,如果你玩过linux 必然接触过一个词叫 "交叉编译", 其实mcu的编译也叫交叉编译, 但是代码有非常多款编译器, 其中keil5系列的编译器都是收费的; 也有免费开源的 GCC; 所以本方案依然选用免费开源的GCC.
0.4 链接文件(.ld)和启动文件(.S)
启动文件是芯片启动时执行的第一个文件, 它的作用是初始化芯片, 并将程序跳转到main函数中执行. 你可以类比计算机的bios系统来理解.至于链接文件, 它的作用是告诉编译器如何将程序中的各个部分链接到一起, 以及如何将程序中的各个部分放置在芯片的内存中. 这两个文件是编译器在编译程序时必须使用的文件, 它们定义了程序的内存布局和程序中各个部分的位置和大小.
一般情况下, 你只需要知道 GCC版的这两个文件跟 keil5的不一样就好了, 具体内部逻辑等等芯片厂商去做适配吧.至于makefile 就是方便你命令行操作的脚本工具,但是本方案不需要用make, 因为EIDE已经帮我们做好了.
0.5 调试器
这里依然使用一个开源的VSCODE插件, cortex-debug插件 具体玩法可以去bilibili看教学视频;
0.6 烧录器
烧录器就是将编译好的程序烧录到芯片中, 然后芯片就可以运行程序了. 这里使用的是openOCD, 具体玩法可以去bilibili看教学视频;
OK, 至此前言已科普完成, 接下来是操作正文了.
1. STM32CubeMX工程生成
工程生成的配置跟常规的一模一样, st官方也会配套适配自己的软件.
一下注重简介project manager 不同的地方
1.选择生成makefile工程,(stm32cubeIDE方案还有些bug没调明白, 后续再写篇文章)
2.生成library配置, 之所以不选择全部libraries这个选项主要是避免编译找不到文件依赖报错的问题;

2. EIDE项目创建
在创建eide工程前,请务必将目录下的启动文件复制一份到Core 或者Driver之类的地方!!! (有坑)
因为现版本的EIDE创建新工程的时候会把启动文件的内容刷掉.导致编译报错.(已提交bug待后续优化)
根据自己芯片内核选择.

选择同命名文件夹覆盖跳转完事儿.


同理导入对应的索引到eide中


不出意外你编译会触发一个error " non constant or forward reference address expression for section .ARM.extab"
这其中原因为 你的gcc版本也是10版的, 你可以换成11版或者前往.ld文件 将全部的(READONLY) 替换成空格:


至此, 你就算编译完成了! 然后就是配置 烧录配置进行烧录即可. (附加一张本工程的基于openOCD 的 daplink 配置方法 )


3. 移植踩坑记录与解决方案
这里针对两种人做踩坑指南总结:
第一种: 已经掌握了基于eide 导入keil5工程开发的工程师(基于stm32cubeMX生成)
那么你需要避开的就两个坑, 一个是启动文件被覆盖的坑, 一个是链接文件的名字修改.或者说gcc版本问题;
第二种: 只会用keil5 或者完全没用过eide 的工程师 (但是会用stm32cubeMX)
你可以先从eide 导入keil5工程跑一遍练练手, 由于CSDN都是些陈年古法, 我更新了一版新的配置方法

浙公网安备 33010602011771号