Lazy loaded image
嵌入式软件
使用C与C++混合编程实现STM32开发
Words 874Read Time 3 min
2025-6-9
2025-6-9
之前在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。
notion image
虽然新版的Cube中提供了Cmake的选项,但是项目生成的CmakeLists中没有调用g++编译链,且新建了Cmake的文件夹来管理相关的cmake文件,给我们后续的更改和管理引来了更加繁琐的操作。此处选择STM32CubeIDE,生成的CmakeLists即在项目根目录下,且单文件更具可读性。
notion image
notion image

引入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++部分代码正常编译。
notion image
 
上一篇
使用clion及stm32Cube搭建STM32编译开发环境
下一篇
apt-get获取低版本的gcc交叉编译工具链