STM32的第一个项目,在C++中使用HAL

uni*_*tem 7 c++ hal stm32

我想在C++中使用HAL为STM32创建一个项目.不幸的是,CubeMX仅支持C中的项目.但是,HAL支持C++.

我在CubeMX中创建了一个项目,我试图将它导入上面的任何IDE但没有任何成功,因为它是作为C项目导入的.所以它看起来不是一个好的解决方案.

此外,我尝试在上述IDE中创建一个C++项目,并从CubeMX添加它的文件.这似乎更逻辑,但我不能以正确的方式做到,因为我的配置仍然是错误的.

任何人都可以解释我如何在Eclipse或Atollic TrueSTUDIO中配置新的C++项目才能使用HAL?

Jer*_*oen 7

最新版本的CubeMX支持System Workbench 4 STM32,它是一个基于Eclipse的IDE,预先配置为STM32目标开发.它可以选择将项目转换为C++(在项目浏览器中右键单击项目,然后选择"转换为C++").

请注意,我没有使用此方法的直接经验.我们使用STM HAL并在此基础上构建我们的C++应用程序,所以这绝对是可能的,但我们的IDE是Keil,所以YMMV.


Jim*_*red 6

如何将STM32CubeMX生成的Atollic Eclipse C项目转换为C++(3个步骤):

  • 将main.c复制到main.cpp并从build中"排除"main.c.结果:还没有完成.尽管main.cpp可能出现在Eclipse项目文件列表中,但它甚至没有开始编译(不会捕获明显的语法错误),并且缺少main()会出现链接器错误.
  • 接下来,添加org.eclipse.cdt.core.使用文本编辑器对.project文件的cc性质,如下所示... <natures> <nature>org.eclipse.cdt.core.cnature</nature> <nature>org.eclipse.cdt.core.ccnature</nature> 请参阅http://www.openstm32.org/forumthread1244.这可以在Eclipse运行时打开项目时完成.结果:main.cpp编译但无法找到包含文件,因为包含路径错误.你认为cpp nature会是一个更好的名字.编辑:搜索Eclipse的"C++性质"帮助,获取有关如何使用菜单File/New/Other/Convert to C/C++ Make Project添加C++性质的提示.
  • 接下来,修改项目设置以将相关的C设置复制到C++设置 - 如此处所示. 在此输入图像描述需要关闭并重新打开项目才能使此更改生效.结果:正确构建,链接,运行和运行.main.cpp可以调用HAL c代码,HAL回调可以调用.cpp文件中的函数.可能需要在cpp文件一个extern"C"改性剂如果1在.cpp侧呼吁.C侧的功能(通过预先待决的修改函数原型defined extern "C" 2 .C并排正在调用的回调在一个.cpp定义(通过预先挂起修改.cpp端的函数定义defined extern "C".

一些说明:

  • 如果我用CubeMX重新生成代码(例如,更改时钟或引脚配置),main.c将更新但main.cpp不会 - 所以有必要将.c文件中的更改/差异合并到.cpp文件.
  • 如何确定C&C++设置是等效的:在构建之后,查看Console窗口并比较gcc和g ++的命令行调用,以确保相关参数(路径,-D等)相同.
  • 编辑Eclipse .cproject XML文件并将C设置复制到C++端是可能的(但风险很大)(此处省略了具体细节 - 但在编辑.cproject文件之前在Eclipse中关闭项目).
  • 关于对CubeMX/HAL'膨胀'的反对意见:CubeMX可以非常快速地生成代码和项目.如果HAL API速度很慢 - 例如,GPIO端口引脚访问 - 那么只需用新的用户函数替换API调用,该用户函数包含臃肿API所做的更简单的子集.我经常在时间要求严格的代码中这样做.
  • 我正在使用CubeMX(4.14.0)和Atollic(v6.0.0 Lite).我没有看到在Atollic Eclipse中转换为C++的项目选项,尽管我在其他Eclipse环境中看到过该选项,例如Xilinx Eclipse.

改进的空间:可能有一个CubeMX模板可以编辑,以使这些更改更自动,但我不太了解CubeMX模板,使这个hack更优雅.

我也使用CubeMX和IAR EWARM,并通过一个类似的(但稍微更容易)的过程转换为.cpp项目.


Tim*_*mmm -1

mBed 可能支持它,具体取决于它是哪种 STM32 芯片。在线 mBed 编译器允许导出到各种 IDE。新的离线版本(yotta)使用 cmake,它也可以导出到某些 IDE。不幸的是 yotta 目前只支持几个芯片。