之前在B站看到稚晖君分享的项目视频中采用了C与C++混合编程的方式进行STM32的代码的开发,而网上关于该方法的参考教程较少。近期正好有时间对STM32的Cube开发做更深入的学习,基于稚晖君的github代码和自己的尝试摸索,实现出使用C与C++混合编程对STM32进行代码编写。
配置环境: STM32Cube:6.14.1 Clion:2025.1.1
如下所有操作均参考之前的文章《使用clion及stm32Cube搭建STM32编译开发环境》,仅对配置不同点进行描述。
STM32Cube生成工程代码
在通过STM32Cube配置完项目功能模块后,在配置项目管理时,Toolchain/IDE需要选择”STM32CubeIDE”,并且勾选Generate Under Root。

虽然新版的Cube中提供了Cmake的选项,但是项目生成的CmakeLists中没有调用g++编译链,且新建了Cmake的文件夹来管理相关的cmake文件,给我们后续的更改和管理引来了更加繁琐的操作。此处选择STM32CubeIDE,生成的CmakeLists即在项目根目录下,且单文件更具可读性。


引入main.cpp
此处功能似乎可用通过在cube项目配置中勾选“Do not generate the main()”功能或者直接通过更改main.c的文件类型及main.h文件内容的方式实现,在此没有再进行深入测试,并不确认可行。
通过clion打开项目,新建main.cpp文件及一个头文件(该头文件在此参考稚辉君的项目命名为common_inc.h)。
main.cpp作为后续我们程序的业务代码入口,实现各部分功能模块的初始化及调用逻辑。
common_inc.h 用来声明涉及到的各部分头c及c++文件。
在原本生成的main.c中包含common_inc.h头文件并调用Main()作为新的函数入口。程序在执行进入main函数进行功能初始化(cube已配置对应功能)后则执行跳转到Main函数中继续业务代码逻辑。
更改CmakeList
cmakeLists中已经配置了gcc及g++,我们只需要和正常编写c++项目cmakeLists一样将头文件路径及源文件查找路径添加进对应的定义中即可。
编译
通过clion构建LOG如下,可见项目对C++部分代码正常编译。

- Author:liwanxin
- URL:https://www.liwanxin.net/article/1fe7a15e-f0ed-8012-9c58-da65d14a3954
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
