当前位置: 首页 > news >正文

向Visual Studio Code导入ST项目

在ARM处理器的世界,有着很多的半导体厂家,其中最大之一是ST。
ST拥有大量的产品型号,这些产品具有多种功能以及用于它们对应的开发板。ST自家也提供了一个开发环境STM32CubeIDE,用来在ST设备上进行开发。另外他们也提供了一个配置工具STM32CubeMX,它用于配置设备属性并生成项目的配置信息。

如果你已经参与过基于ST的项目,我不会告诉你任何新内容。你可能不知道我们为在 Visual Studio Code 中启用嵌入式开发人员所做的工作。 这种嵌入式体验依赖于新的 vcpkg artifacts 特性来帮助获取工具链和配置开发环境。为了让使用ST设备的开发人员更轻松地使用Visual Studio Code,我们一直在与 ST 合作以实现STM32CubeIDE 项目的导入。

我们通过从ST项目生成CMake项目来实现这一点。ST在其产品组合中提供了许多示例项目。 我们已经使用这种机制在ST的示例项目中验证了构建,其中超过3000 个。 目前,我们的通过率达到了94%,此外我们还在不断提高它。 这让我们相信,我们的方法将成功导入你自己的ST项目。我们的嵌入式工具扩展还支持通过导入器进行设备固件烧写和调试,但请注意,我们只在我们现有的测试硬件上验证了这一点。

这篇文章将介绍这个项目导入器功能如何与vcpkg和ST的工具结合使用。

>> 请移步topomel查看图片

在 Visual Studio Code 中开发ST项目
本文假定你已经对ST设备,开发工具和嵌入式开发基础知识有所熟悉。如果你需要一些了解一些背景知识,可以阅读下面两篇Shawn Hymel写的两份入门文档。
> Introduction to STM32CubeIDE
> Introduction to FreeRTOS

我们依靠 vcpkg 来管理 CMake 和 Ninja 等依赖项,包括获取它们并使它们可用于你的开发环境。你可以在我们的Visual Studio Code嵌入式开发概述中了解有关我们如何 vcpkg 的更多信息,使用如下命令来安装它。

Linux/macOS系统
# . <(curl
https://aka.ms/vcpkg-init.sh -L)

PowerShell
# iex (iwr -useb https://aka.ms/vcpkg-init.ps1)

请注意,你需要在 Visual Studio Code 中安装嵌入式工具扩展版本 0.3.0 或更高版本才能使用 ST 项目导入器。

>> 请移步topomel查看图片

我们的导入器要求你在平台的默认位置安装 STM32CubeIDE 软件。 我们一直在使用 STM32CubeIDE 1.9.0 和 STM32CubeMX 6.5.0 测试此功能。 如果你安装了多个实例,我们将无法控制选择哪个。

另外,你还需要在 STM32CubeIDE 中为你的设备获取板级支持包。 这样我们就可以在 Visual Studio Code 中使用 ST 提供的编译器和支持应用程序。

ST未来将提供重量更轻的封装。我们计划在这里也通过vcpkg来获取依赖项。
安装了我们的先决条件后,从 Visual Studio Code 中的命令托盘 运行“从 ST 项目创建项目”。

>> 请移步topomel查看图片

导航到你的 ST .cproject 所在的位置并选择它。 然后,你可以选择调试或发布配置。 现在可以选择 Build 以使用 CMake 编译设备的固件。 要调试,请选择调试视图,然后选择启动按钮。 这将运行 STM32 编程器将固件刷写到设备上并使用 GDB 进行连接。 从这里可以使用我们所有的嵌入式开发视图(串行、RTOS 和外围设备)。

>> 请移步topomel查看图片

如果你的项目有一个.ioc文件,可以打开上下文菜单并为你的项目打开 STM32CubeMX。

>> 请移步topomel查看图片

如果你在STM32CubeMX中对项目进行更改,它们将被识别并且CMake缓存将重新生成。

在为你的项目的下一个会话关闭 Visual Studio Code 后,你将需要从激活 vcpkg 的提示符启动 Visual Studio Code。 为此,请在 shell 中导航到包含 vcpkg-configuration.json 的项目文件夹,运行 vcpkg activate,然后运行 code 。

在未来的版本中,这将不再需要,激活将自动发生。

了解 CMake 交互

可以看到在.cproject所在项目的根目录下生成的简单CMakeLists.txt。 这依赖于 cmake 目录下生成的 CMake 文件。 这些文件中有一些路径设置为你机器上ST编译器的发现位置。 如果你打算从 ST 项目格式迁移到 CMake,我们建议你根据需要调整这些文件,特别是在路径可能不同的团队中使用。

另一件需要注意的是,有时在STM32CubeIDE示例中,项目可能位于源代码的子目录中。 如果你没有在文件视图中看到项目文件,这可能就是原因。 选择 CMake 目标视图,你应该会看到 CMake 用于生成构建的所有内容。

根据上述观点,我们建议在使用 STM32CubeMX 生成项目时,在项目管理器中为“Generate Under Root”保留默认选项。 这会将你的.cproject保存在包含生成的源文件的文件夹的根目录中。 这也是 STM32CubeIDE 默认生成项目的方式。

如果再次在 STM32CubeIDE 中打开项目,则需要从项目中排除 CMake 使用的构建目录。 右键单击构建目录并选择资源配置 > 从构建中排除。

>> 请移步topomel查看图片

然后在“从构建中排除”对话框中选择“调试”和“发布”。

>> 请移步topomel查看图片

总结

又想起了我在大厂使用Keil C写STM32代码控制小车的峥嵘岁月了。
害!往事真是不堪回首。
还是不细说了吧。

最后

Microsoft Visual C++团队的博客是我非常喜欢的博客之一,里面有很多关于Visual C++的知识和最新开发进展。大浪淘沙,如果你对Visual C++这门古老的技术还是那么感兴趣,则可以经常去他们那(或者我这)逛逛。
本文来自:《Importing ST projects into Visual Studio Code》

 

相关文章:

  • ES6转为ES5 AST
  • 二分法查找方法
  • UE5物体旋转(蓝图版)
  • 【网络安全】SQL注入专题讲解
  • unordered_set、unordered_map的介绍+使用+比较
  • Leetcode139. 单词拆分
  • DRM系列(9)之drm_atomic_helper_commit
  • Unity入门03——Unity脚本
  • finally执行语句的注意和小陷阱
  • 【推荐系统->论文阅读】WideDeep模型
  • 【Node】cookie、sessionStorage、localStorage 与 身份认证
  • 把setting.xml放在conf和.m2目录的区别
  • OpenCV图像加载、显示与保存
  • Vulhub靶场搭建与使用
  • 80-Java的Map集合:概述、API、遍历方式
  • 【347天】每日项目总结系列085(2018.01.18)
  • 【面试系列】之二:关于js原型
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • DataBase in Android
  • JavaScript类型识别
  • Magento 1.x 中文订单打印乱码
  • PAT A1120
  • Redis中的lru算法实现
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • SQLServer之创建显式事务
  • Tornado学习笔记(1)
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • Yeoman_Bower_Grunt
  • 安卓应用性能调试和优化经验分享
  • 记一次删除Git记录中的大文件的过程
  • 聊聊hikari连接池的leakDetectionThreshold
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 如何解决微信端直接跳WAP端
  • 小李飞刀:SQL题目刷起来!
  • 最近的计划
  • MPAndroidChart 教程:Y轴 YAxis
  • 数据可视化之下发图实践
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • ​软考-高级-系统架构设计师教程(清华第2版)【第15章 面向服务架构设计理论与实践(P527~554)-思维导图】​
  • #QT(智能家居界面-界面切换)
  • $().each和$.each的区别
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (3)nginx 配置(nginx.conf)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (一)RocketMQ初步认识
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • **CI中自动类加载的用法总结
  • ..回顾17,展望18
  • .cn根服务器被攻击之后
  • .NET Compact Framework 3.5 支持 WCF 的子集
  • .net oracle 连接超时_Mysql连接数据库异常汇总【必收藏】
  • .Net环境下的缓存技术介绍