Clion STM32CubeMX 项目

系列文章目录


前言

最后修改 2024 年 4 月 16 日

操作系统:Windows / Linux / macOS

所需工具 STM32CubeMX、GNU ARM 工具链

项目格式: CMake

兼容配置: OpenOCD 运行与调试/嵌入式 GDB 服务器

        对于以 STM32 板卡为目标的嵌入式项目,CLion 与 STM32CubeMX 集成。

        您可以将 CubeMX 生成的 .ioc 文件作为项目打开,CLion 将自动创建 CMake 项目结构。您也可以从头开始一个新项目--向导将帮助您在 CubeMX 中进行配置。

        CLion 中的 STM32CubeMX 支持是捆绑的 OpenOCD + STM32CubeMX 插件的一部分。因此,项目设置和项目创建过程的某些步骤与 OpenOCD 相关联。不过,STM32CubeMX 项目并不仅限于与 OpenOCD 一起使用:您也可以设置更通用的嵌入式 GDB 服务器运行/调试配置。在后一种情况下,请忽略项目设置中与 OpenOCD 相关的设置和步骤。

目前不支持以下电路板配置: STM32MP1、

双核 STM32H7 和启用 TrustZone(R) 的 STM32L5。


一、所需工具

1.1 STM32CubeMX

        CubeMX 是一款图形工具,可帮助配置 STM32 微控制器并生成相应的 C 代码。在 CubeMX 中,您可以设置 CPU 和外设,调整频率和引脚模式。它会生成一个存根项目,然后由 CLion 将其转换为 CMake 项目。

1.2 GNU ARM 工具链

        GNU ARM 工具链是一套跨平台工具,可在桌面上启动,而构建结果只能在目标 ARM MCU 环境中运行。

        要让 CLion 检测到工具链,系统路径(PATH)中应包含该工具链。您可以通过在命令行中运行 arm-none-eabi-gcc 进行检查,系统应能识别该命令。

  • 在 Linux 和 macOS 上,请确保工具链路径位于 ~/.profile 中(而非 ~/.bash_profile 或 ~/.zprofile 等特定于 shell 的配置文件中)。
  • 在 Windows 中,切换到系统工具链(推荐)。或者,也可以使用 MinGW / MinGW-w64 环境。

        在 "设置"|"构建、执行、部署"|"嵌入式开发 "中,您可以检查是否正确检测到 CubeMX 的位置,并根据需要手动设置路径。如果不打算使用 OpenOCD,请将 OpenOCD 位置字段留空。

二、从 .ioc 文件打开项目

        如果您已经有一个包含 .ioc 文件的项目,请调用文件 | 打开,选择 .ioc 文件,然后选择打开为项目。CLion 将自动生成 CMake 项目结构。

检查 .ioc 文件名是否包含空格、非拉丁符号或其他特殊字符。

三、创建新项目

在 Apple Silicon (M1, M2) 机器上,CLion 的 STM32CubeMX 项目向导存在一个已知问题。作为一种变通方法,可以考虑在 STM32CubeMX 应用程序中创建项目,然后如上所述在 CLion 中打开它。

        对于新项目,您有两种选择:a)在 CubeMX 中配置 MCU 并生成代码,然后在 CLion 中打开 .ioc 文件;或者 b)按照下面的方法从头开始创建一个项目。

  1. 转到文件 | 新项目,选择 STM32CubeMX 作为项目类型。CLion 将为默认的 STM32F030F4 MCU 创建 .ioc 文件:.ioc 文件是包含静态初始化设置的 CubeMX 原始项目文件。在 CLion 中,该文件是只读文件,在当前步骤中,它是下一步将在 CubeMX 中设置的配置的占位符。
  2. 现在,您需要切换到 CubeMX 来生成项目源并填充 .ioc 文件。单击 "Open with STM32CubeMX(用 STM32CubeMX 打开)"链接,从 CLion 打开 CubeMX。

  3. 在 CubeMX 中,已为新创建的项目设置了配置。单击 STM32F030F4Px,调用 MCU/板选择器并更改默认 MCU:

    更换 MCU 时,CubeMX 会重置项目名称。在项目管理器中手动提供名称,然后接受覆盖项目的建议。

    硬件配置准备就绪后,检查工具链/IDE 字段是否设置为 STM32CubeIDE,并选择在根目录下生成,然后单击生成代码:

  4. 如果不打算使用 OpenOCD,请跳过这一步(点击取消)。

    回到 CLion,当 CMake 项目加载完成后,系统会提示您选择一个电路板配置文件。建议列表包括 OpenOCD 随附的电路板配置文件,它们位于 Openocd-Installation/share/openocd/scripts/board 中:

    您还可以在以后的 OpenOCD 运行/调试配置设置中选择电路板配置文件,包括自定义配置文件。

    点击 Copy to Project & Use(复制到项目并使用),选中的电路板配置文件将被添加到项目树中。您可以在编辑器中打开并调整该文件。

四、编辑源代码

        在 CubeMX 中更改 MCU 配置并单击 "生成代码 "时,CLion 项目会自动更新:

         您也可以手动更新项目:右键单击项目视图中的 .ioc 文件,然后选择使用 STM32CubeMX 更新 CMake 项目。

        在编辑 CubeMX 生成的文件时,请始终将代码括在 /* 用户代码 BEGIN ... */ 和 /* 用户代码 END ... 中。*/ 和 /* 用户代码结束 ... */ 伪注释。这将防止代码再生时被 CubeMX 覆盖。此外,考虑将代码片段提取到单独的 .c 或 .h 文件中(参见下一点)。

        如果您添加了源文件或头文件,请将它们放在 Src 和 Inc 目录中。

        每次更新项目时,CLion 都会从模板中重新生成 CMakeLists.txt。如果需要更改 CMake 脚本(例如,添加外部库或 FPU 支持),请在 CMakeLists_template.txt 中进行更改,然后调用 "使用 STM32CubeMX 更新 CMake 项目"。

五、构建项目

        要构建项目,请使用以下选项之一:

        运行或调试 OpenOCD 或嵌入式 GDB 服务器配置。这两种配置都将 "构建 "作为 "启动前 "步骤:

        使用 "构建 "操作手动构建项目。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/8629.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分布式与一致性协议之ZAB协议(七)

ZAB协议 ZAB协议:如何处理读写请求 你应该有这样的体会,如果你想了解一个网络服务,执行的第一个功能肯定是写操作,然后才会执行读操作。比如,你要了解ZooKeeper,那么肯定会在zkClient.sh命令行中执行写操作(比如crea…

如何购买阿里云99计划的ECS云服务器?99元购买阿里云2核2G3M服务器教程

阿里云助力中小企业和开发者无忧上云的“99计划”中有两款性价比超高的ECS云服务器,2026年3月31日活动结束前新购和续费价格一样。 其中个人和企业新老用户同享的2核2G3M服务器仅需99元/年(续费同价),企业新老用户同学的2核4G5M仅…

Python 框架安全:Django SQL注入漏洞测试.(CVE-2021-35042)

什么是 Django 框架 Django 是一个用 Python 编写的 Web 应用程序框架。它提供了许多工具和库,使得开发 Web 应用程序变得更加容易和高效。Django 遵循了“MTV”(模型-模板-视图)的设计模式,将应用程序的不同组件分离开来&#x…

《从零开始,搭建一个简单的UVM验证平台》实操

最近的工作中需要用UVM平台去仿真软件同事写的C程序,虽然只要用EDA同事已经搭好的UVM平台稍微改改就行,但对于我这种从未接触过UVM甚至都没用过System Verilog的纯FPGA工程师来说还是很有难度的,因为我对这方面一点概念都没有。 基于此&…

[Kubernetes] 安装KubeSphere

选择4核8G(master)、8核16G(node1)、8核16G(node2) 三台机器,按量付费进行实验,CentOS7.9安装Docker安装Kubernetes安装KubeSphere前置环境: nfs和监控安装KubeSphere masternode1no…

【QT学习】14.线程学习

一。线程了解 线程是计算机科学中的一个重要概念,它是操作系统能够进行运算调度的最小单位。线程是进程中的一个执行流,一个进程可以包含多个线程。与进程相比,线程更轻量级,可以更高效地利用计算机资源。 线程有以下几个特点&…

OpenCV|简单绘制一个矩形

OpenCV中的rectangle() 为绘制矩形命令,形式如下: # (img: cv2.typing.MatLike, pt1: cv2.typing.Point, pt2: cv2.typing.Point, color: cv2.typing.Scalar, thickness: int ..., lineType: int ..., shift: int ...)cv2.rectangle(img, pt1, pt2, …

Dynamic Extraction of Subdialogues for Dialogue Emotion Recognition

对话情感识别的子对话动态提取 摘要1. 介绍2 相关工作2.1 对话上下文建模2.2 常识知识 3 方法3.1 问题定义3.2 模型概述3.3 特征提取模块3.4 依赖性建模3.5 交互式子对话提取模块3.6 重要性增强的多头自注意力模块3.7 子对话框主题提取模块3.8. 分类模块 四、实验4.1 数据集4.1…

含义:理财风险等级R1、R2、R3、R4、R5

理财风险等级R1、R2、R3代表什么,为什么R1不保本,R2可能亏损 不尔聊投资https://author.baidu.com/home?frombjh_article&app_id1704141696580953 我们购买理财产品的时候,首先都会看到相关产品的风险等级。风险等级约定俗成有5级&…

Java进阶07集合(续)

Java进阶07 集合(续) 一、数据结构(树) 1、关于树 1.1 相关概念 节点:树中每个单独的分支 节点的度:每个节点的子节点数量 树高:树的总层数 根节点:最顶层节点 左子节点&…

Python专题:三、数字和运算(2)

目录 一、数学运算 二、赋值运算 一、数学运算 1、运算符号 加法 减法- 乘法* 除法/ 计算机中浮点数表示有精度限制,Python有限,所以近似取数 2、除法取整// Python2中 整数/整数 值为整数 Python3中 整数/整数 整数or浮点数 //计算除法对结果取…

2024年最适合做的母婴赛道,选品思路揭秘,教你如何选品!

大家好,我是电商花花。 在我印象中,每年都有人唱衰抖音小店不好做了,太卷了,普通人没有机会了,但是现在直播电商时代,很多信息都会片面的,做不好并不是因为不好做,而是因为你做不好…

60*13薪,外包到新疆...去吗?

大家好,我是白露呀。 今天我在牛客上看到一篇帖子,一位网友说自己收到一个 offer ,薪资很高:60k*13,大约一年有近80万。 但是有个要求是外包到新疆的乌鲁木齐,他拿不定主意,就在牛客上发了这个…

Crocoddyl 使用教程(二)

系列文章目录 前言 小车摆杆是另一个经典的控制实例。在这个系统中,一根欠驱动的杆子被固定在一辆一维驱动的小车顶部。游戏的目的是将杆子升到站立位置。 模型如下: https://en.wikipedia.org/wiki/Inverted_pendulum 我们用 表示小车质量、 表示摆杆质…

Agent Hospital: 一种可进化医疗代理人的医院模拟器

论文来源: https://arxiv.org/pdf/2405.02957 1 引言 大型语言模型(LLM)代理在各种任务中表现出了有前景的性能,包括代码生成、信息博弈和问答等。受 LLM 代理能力的启发,一些研究采用它们来模拟人类互动和行为,而不是处理单一任务,例如社交媒体上的信息传播和"Stanford…

Pyside6详细使用教程python之GUI开发

1、首先需要安装Pyside6,终端执行命令: pip3.10 install pyside6 2、你们的一般是 pip install pyside6 2、如下代码创建一个简易程序导入必要的模块 import sys from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton,…

c语言实现贪吃蛇小游戏————附全代码!!!

目录 1.Win32 API 1.1控制台应用程序 1.2控制台的名称,控制台窗口大小 1.3设置控制台光标位置 COORD - 光标坐标 GetStdHandle - 获取句柄 SetConsoleCursorPosition - 设置光标位置 封装一个设置光标的函数 1.4设置控制台光标的属性 CONSOLE_CURSOR_INFO …

HNU-人工智能-作业1

人工智能-作业1 计科210x 甘晴void 第1题 考虑一个实时的在线电话翻译系统,该系统实现英语与日语之间的实时在线翻译,讨论该系统的性能度量,环境,执行器,感知器,并对该环境的属性进行分析。(10…

【Android】源码解析Activity的结构分析

源码解析Activity的结构分析 目录 1、Activity、View、Window有什么关联?2、Activity的结构构建流程3 源码解析Activity的构成 3.1 Activity的Attach方法3.2 Activity的OnCreate 4、WindowManager与View的关系总结 1、一个Activity对应几个WindowManage&#xff0…

Java 中的 HTTP 客户端库OkHttp、Apache HttpClient和HttpUrlConnection

大家好,我是G探险者。 项目开发里面经常会有这么一种场景:与服务器进行 HTTP 通信。一般存在于服务间远程调用的场景 Java 生态系统提供了多种 HTTP 客户端库,每种都有其自己的特点、优势和适用场景。 本文将介绍几种主要的 Java HTTP 客户…