12

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

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

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

谁能解释我应该如何在 Eclipse 或 Atollic TrueSTUDIO 中配置新的 C++ 项目以使用 HAL?

4

4 回答 4

9

最新版本的 CubeMX 支持 System Workbench 4 STM32,这是一个基于 Eclipse 的 IDE,预先配置为针对 STM32 目标进行开发。它具有将项目转换为 C++ 的选项(右键单击项目资源管理器中的项目,然后选择“转换为 C++”)。

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

于 2016-02-11T08:19:27.070 回答
7

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

  • 将 main.c 复制到 main.cpp 并从构建中“排除”main.c。结果:还没有完全奏效。尽管 main.cpp 可能出现在 Eclipse 项目文件列表中,但它甚至没有开始编译(不会捕获明显的语法错误)并且缺少 main() 存在链接器错误。
  • 接下来,添加 org.eclipse.cdt.core。使用文本编辑器将 .project 文件复制到 .project 文件中,如下所示 ... <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 文件中的函数。如果1 .cpp 端正在调用 .c 端的函数(通过预先挂起defined extern "C" 2 .c 端调用在 .cpp 中定义的回调来修改函数原型,则 .cpp 文件中可能需要一个外部“C”修饰符) (通过预先挂起 .cpp 来修改 .cpp 端的函数定义defined extern "C"

一些注意事项:

  • 如果我曾经使用 CubeMX 重新生成代码(例如,更改时钟或引脚配置),main.c 将得到更新,但 main.cpp 不会 - 所以有必要将 .c 文件中的更改/差异合并到.cpp 文件。
  • 如何确定 C 和 C++ 设置相同:构建后,查看控制台窗口并比较 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 项目。

于 2016-11-03T17:21:10.793 回答
1

有一种非常简单的方法来构建一个 cpp 项目stm32cubeide

  1. 在创建新的 stm32 项目后检查 c++ 框
  2. 做初始化
  3. 编译主文件夹中的代码
  4. 按右键单击并选择源文件夹
  5. 把你的cpp文件放进去
  6. 在cpp文件中调用这个cpp函数main.c做一个简单的函数,比如main2()
  7. 从现在开始调用它,您可以通过函数main.c使用 cpp函数main2()
于 2020-07-07T06:08:34.493 回答
-1

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

于 2016-02-09T11:32:50.880 回答