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.mfbz.cn/a/604209.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

QX-mini51单片机学习-----(3)流水灯

目录 1宏定义 2函数的定义 3延时函数 4标准库函数中的循环移位函数 5循环移位函数与左移和右移运算符的区别 6实例 7keil中DeBug的用法 1宏定义 是预处理语句不需要分号 #define uchar unsigned char//此时uchar代替unsigned char typedef是关键字 后面是接分号…

【Linux】线程的内核级理解详谈页表以及虚拟地址到物理地址之间的转化

一、线程的概念 对于进程来说,进程创建时间和空间成本较高,因为进程是承担分配系统资源的基本实体,所以线程的出现就成为了必然。Linux线程与进程非常相似,Linux设计者在设计之初觉得如果再为线程设计数据结构和调度算法就会使整个…

java--io流(一)

1. 前置知识 字符集是什么? 字符集(Character Set)是一组字符的集合,它定义了可以在计算机系统中使用的所有字符。字符集可以包括字母、数字、标点符号、控制字符、图形符号等。字符集使得计算机能够存储、处理和显示各种语言和…

idea 项目 修改项目文件名 教程

文章目录 目录 文章目录 修改流程 小结 概要流程技术细节小结 概要 原项目名 修改流程 关掉当前项目的idea页面 修改之后的文件名 重新打开idea。选择项目打开项目页面 技术细节 出现下面这个问题,可以参考作者新的一编文章idea开发工具 项目使用Spring框架开发解…

【智能楼宇秘籍】一网关多协议无缝对接BACnet+OPC+MQTT

在繁华的都市中心,一座崭新的大型商业综合体拔地而起,集购物、餐饮、娱乐、办公于一体,是现代城市生活的缩影。然而,这座综合体的幕后英雄——一套高度集成的楼宇自动化系统,正是依靠多功能协议网关,实现了…

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

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

一文盘点 Partisia Blockchain 生态 4 月市场进展

Partisia Blockchain 是一个以高迸发、隐私、高度可互操作性、可拓展为特性的 Layer1 网络。通过将 MPC 技术方案引入到区块链系统中,以零知识证明(ZK)技术和多方计算(MPC)为基础,共同保障在不影响网络完整…

redis--安装

简介 官网:RedisInsight - The Best Redis GUI 各个版本官网下载地址:http://download.redis.io/releases/ Redis和Memcached是非关系型数据库也称为NoSQL数据库,MySQL、Mariadb、SQL Server、PostgreSQL Oracle 数据库属于关系型数据 应用…

17.接口自动化学习-日志

1.日志输出渠道 &#xff08;1&#xff09;文件格式 xx.log &#xff08;2&#xff09;控制台输出 2.日志级别 debug<info<warnning<error<critical 3.代码实现 from utils.handle_path import log_path import logging import datetime def logger(fileLogTr…

rocketMQ-常用知识点

1、RocketMQ有什么作用&#xff1f; 1、应用解耦 系统的耦合性越高&#xff0c;容错性就越低。以电商应用为例&#xff0c;用户创建订单后&#xff0c;如果耦合调用库存系统、物流系统、支付系统&#xff0c;任何一个子系统出了故障或者因为升级等原因暂时不可用&#xff0c;都…

多线程【阻塞队列】(生产者消费者模型代码实现)

阻塞队列 解耦合削峰填谷生产者消费者模型&#xff1a; 解耦合 削峰填谷 生产者消费者模型&#xff1a; 正常来说&#xff0c;wait通过notify唤醒&#xff0c;其他线程调用了take,在take的最后一步进行notify. package thread; class MyBlockingQueue{private String [] data…

OpenCV 入门(二)—— 车牌定位

OpenCV 入门系列&#xff1a; OpenCV 入门&#xff08;一&#xff09;—— OpenCV 基础 OpenCV 入门&#xff08;二&#xff09;—— 车牌定位 OpenCV 入门&#xff08;三&#xff09;—— 车牌筛选 OpenCV 入门&#xff08;四&#xff09;—— 车牌号识别 OpenCV 入门&#xf…

存储虚拟化概述

目录 1. 存储体系架构 2. 存储设备层虚拟化 3. 块聚合层虚拟化 3.1. 块聚合层虚拟化实现方式 3.2. 块聚合层虚拟化分类 3.3. 块聚合层虚拟化技术 4. 文件/记录层的存储虚拟化 存储虚拟化是一种将存储系统的内部功能从应用、主机或者网络资源中抽象、隐藏或者隔离的技术&…

事业单位向媒体投稿发文章上级领导交给了我投稿方法

作为一名事业单位的普通职员,负责信息宣传工作,我见证了从传统投稿方式到智能化转型的全过程,这段旅程既是一次挑战,也是一次宝贵的成长。回想起初涉此领域的日子,那些通过邮箱投稿的时光,至今仍然历历在目,其中的酸甜苦辣,构成了我职业生涯中一段难忘的经历。 邮箱投稿:费时费…

06-beanFactoryPostProcessor的执行

文章目录 invokeBeanFactoryPostProcessors(beanFactory)invokeBeanFactoryPostProcessors(beanFactory, getBeanFactoryPostProcessors())invokeBeanDefinitionRegistryPostProcessors(currentRegistryProcessors, registry);invokeBeanFactoryPostProcessors(regularPostProc…

JAVA基础之jsp标准标签

jsp动作标签实现实例化一个实体类 <jsp:useBean id"标识符" class"java类名" scope"作用范围"> 传统的java方式实例化一个实体类 Users user new Users(); <%%> id: 对象名 * class:类 创建对象时,完全限定名(包名…

设置默认表空间和重命名

目录 设置默认表空间 创建的临时表空间 tspace4 修改为默认临时表空间 创建的永久性表空间 tspace3 修改为默认永久表空间 重命名表空间 将表空间 tspace3 修改为 tspace3_1 Oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/13520…

Spring Boot | Spring Boot 整合 “RabbitMQ“ ( 消息中间件 ) 实现

目录: Spring Boot 整合 "RabbitMQ" ( 消息中间件 )实现 &#xff1a;一、Spring Boot 整合 整合实现 : Publish/Subscribe ( 发布订阅 ) 工作模式 ( "3种"整合实现方式 )1.1 基于"API"的方式 ( 实现 Publish/Subscribe "发布订阅"工作…

OSPF Stub区域

原理概述 OSPF 协议定义了多种区域&#xff08; Area &#xff09;类型&#xff0c;其中比较常见的有 Stub 区域和 Totally Stub 区域。区域的类型决定了在这个区域当中所存在的 LSA 的类型。 Stub 区域不允许 Type-4和 Type-5 LSA 进入&#xff0c;该区域会通过 Type-3 LSA…

电子商务对应的职业有哪些?10年互联网人透底行业秘密!

电子商务对应的职业有哪些&#xff1f;10年互联网人透底行业秘密&#xff01; 事实说话&#xff0c;实事求是&#xff0c;不要再把美颜滤镜下的市场&#xff0c;传给新人小伙伴了&#xff01; 大家好&#xff0c;我是微三云胡佳东&#xff0c;一家软件公司负责人&#xff01; …