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

时间:2016-02-09 09:53:07

标签: c++ stm32 hal

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

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

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

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

4 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:5)

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

  • 将main.c复制到main.cpp并从build中“排除”main.c。结果:还没有完成。尽管main.cpp可能出现在Eclipse项目文件列表中,但它甚至没有开始编译(不会捕获明显的语法错误),并且缺少main()会出现链接器错误。
  • 接下来,使用文本编辑器将org.eclipse.cdt.core。 cc 的性质添加到.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 自然会是一个更好的名字。 编辑:搜索Eclipse的“C ++性质”帮助,获取有关如何使用菜单File / New / Other / Convert to C / C ++ Make Project添加C ++性质的提示。
  • 接下来,修改项目设置以将相关的C设置复制到C ++设置 - 如此处所示。 enter image description here项目需要关闭并重新打开才能使此更改生效。结果:正确构建,链接,运行和运行。 main.cpp可以调用HAL c代码,HAL回调可以调用.cpp文件中的函数。如果{。3}} .cpp端正在调用.c端的函数,则.cpp文件中可能需要extern“C”修饰符(通过预先挂起的defined extern "C" 1修改函数原型.c side side正在调用.cpp中定义的回调(通过预先挂起的defined extern "C"修改.cpp端的函数定义。

一些注意事项:

  • 如果我用CubeMX重新生成代码(例如,更改时钟或引脚配置),main.c将更新但main.cpp不会 - 所以有必要合并.c中的更改/差异将文件转存到.cpp文件。
  • 如何确定C&amp; 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模板的了解不足以使这种黑客变得更加优雅。

我也将CubeMX与IAR EWARM一起使用,并通过类似(但稍微更简单)的过程转换为.cpp项目。

答案 2 :(得分:0)

有一种非常简单的方法可以在stm32cubeide中构建cpp项目

  1. 创建新的stm32项目后,选中c ++框
  2. 执行初始化
  3. 编译主文件夹中的代码
  4. 右键单击并选择源文件夹
  5. 将cpp文件放入其中
  6. 为此调用,cpp文件中main.c中的cpp函数使一个简单的函数如main2()
  7. 您从main.c调用它,现在可以通过main2()函数使用cpp函数

答案 3 :(得分:-1)

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