CLion入门2.0(优雅进行STM32和ESP32开发)(船新版本)

CLion入门2.0(优雅进行STM32和ESP32开发)(船新版本)

文章目录

0.前言

先偷懒抄一段自己的前言:

在正点原子和学校教学中都是教我们使用Keil进行代码编写,但是估计用过Keil的用户都会觉得这个软件的界面实在是太老了,看上去实在不是特别的舒服。之前学python接触了PyCharm这款编译器,发现JetBrains家编译器很全,也包括C的编译器CLion。搜一下发现还真有大佬将CLion配置用于STM32开发,因此就学着配了一下。

对了,假如你和笔者一样是学生,可以通过学信网的验证报告申请免费 的JetBrains全家桶。笔者的CLion和PyCharm就是白嫖来的

补充一些:

JetBrains不仅支持学生认证,还支持开源开发者认证,具体如何认证都可以在CSDN上找到详细教程,此处不再赘述。

其实用了一阵Keil感觉编译尤其是调试还是很方便的,本来不打算换回CLion了(毕竟配环境实在是太痛了)。但是接触了ESP32,发现自己实在是不适应VSCode,查到CLion也可以开发ESP32,那就长痛不如短痛,直接把STM32和ESP32的环境都配好。查了查相关的资料,现在已经有很多博客讲怎么配置CLion开发STM32,怎么配置CLion开发ESP32,好像还没有人在一篇里把这俩都讲了。

这篇博客的目的就是一口气配好这两个环境,并且实现开发过程的无缝切换。

配环境是一个比较有时效性的工作,我再根据两年前写的那篇【软件入门】 CLion在工程中添加目录&新文件_clion中鼠标右键怎么设置-CSDN博客,发现已经有很多东西都变了。所以在前面声明一下:本文写于2025.01.03,写完于2025.01.08。如果间隔的时间很长,很可能会在配置过程中具体步骤有变化,但是如果你仔细思考配置的过程其实都大差不差,一定要边配边琢磨。

如果严格按照本博客的顺序配环境出了问题,可以在网上搜一搜那个报错,一般都会有解决办法。如果搜不到解决办法,可以全部卸载环境全部重装一次,有时候重装一次问题就解决了,可能是不知道在哪一步细节搞错了自己却没发现。本文的安装过程是经过二次验证的,我在配好所有环境之后又卸掉了所有环境,重新配了一遍,是没问题的(起码在我写博客的时候是没问题的)。

建议大家在选择版本时,选择当时最新的release版,如果没有特别的需求就不要选老的。尤其不要其中几个组件选老版本,几个组件选新版本,很可能会出现不能互相配合工作的情况。

1.准备工作

1.1.安装CLion

有两种方法,一种是先安装一个JetBrains Toolbox,一种是直接在官网安装CLion。推荐第一种。

下载链接:JetBrains Toolbox App: Manage Your Tools with Ease

JetBrains Toolbox可以对JetBrains家的IDE进行统一管理。软件安装一路下一步即可,唯一需要注意的是Toolbox工具安装的默认位置是C盘,需要手动改一下:

然后直接在Toolbox下载CLion即可,他直接会自动安装好。

如果不想用这个Toolbox,就直接下载CLion:CLion: A Cross-Platform IDE for C and C++ by JetBrains,与Toolbox一样都是一路下一步即可。

1.2.下载STM32环境依赖

注意,以下链接和版本截至2025年01月04日都是最新的,但是所有东西都在更新,请在跳转官网后下载最新的release版本,以防出现新老版本不匹配的问题。如:我一开始装的是21年更新的gcc-arm,但是使用的是最新的STM32CubeMX,导致编译报错:non constant or forward reference address expression for section .ARM.extab

1.2.1.STM32CubeMX

STM32CubeMX - STM32Cube initialization code generator - STMicroelectronics

这个软件的快速入门教程链接:【软件入门】STM32CubeMX快速入门_cubemx stm32c0-CSDN博客

这篇博客中有详细的安装和使用教程。

1.2.2.OpenOCD

Download OpenOCD for Windows (gnutoolchains.com)

先下载&解压,无需安装。

1.2.3.MinGW

Releases · niXman/mingw-builds-binaries (github.com)

先下载&解压,无需安装。

注意,后续版本号可能会更新,但是我们选择的都是x86_64-版本号-release-posix-seh-ucrt-rt_v12-rev0。关于这些参数,可以参考这位大佬的博客:[CLion搭建STM32开发环境(基于野火开发板STM32F103C8T6)_clion stm32-CSDN博客](https://blog.csdn.net/qq_46226142/article/details/142715291?ops_request_misc={"request_id"%3A"1103a1bb8609b3a9633f0f431a77538b"%2C"scm"%3A"20140713.130102334..."}\&request_id=1103a1bb8609b3a9633f0f431a77538b\&biz_id=0\&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend\~default-2-142715291-null-null.142^v101^pc_search_result_base2\&utm_term=CLion STM32&spm=1018.2226.3001.4187),相关描述如下:

注意,如果链接失效,可以在CLion的设置中直接点击下载跳转到最新链接:

1.2.4.GNU Arm Embedded Toolchain

Arm GNU Toolchain Downloads -- Arm Developer

先下载&解压,无需安装。往下翻,选一个zip格式的:

1.3.下载ESP32环境依赖

1.3.1.ESP-IDF

dl.espressif.cn/dl/esp-idf/

先下载,无需安装。

1.4.整理

建议临时放至一个文件夹中:

并准备好这样一个路径:

注意,这个路径需要全程没有空格、没有中文,文件夹的名字随意。以图中的文件夹为例,CLion-Environment中可以有任何其他的文件/文件夹。

如果实在下载不成功: https://pan.baidu.com/s/1gxEOqZyS7jf1nCtyD2j-0Q?pwd=hdgy 提取码: hdgy

2.实现STM32开发

2.1.配置STM32开发环境

依然参考稚晖君大佬的经典文章:配置CLion用于STM32开发【优雅の嵌入式开发】 - 知乎 (zhihu.com)

当然了,也可以直接看本篇博客,比较新一些。下面正式开始配环境。

2.1.1.配置OpenOCD

把解压好的OpenOCD文件夹复制到CLion-Environment中,具体如下:

在系统的环境变量中加入一条:

打开命令行,输入:

cmd 复制代码
openocd -v

说明安装成功。如果不成功,可以试试重启电脑,重新输入这行指令。

2.1.2.配置MinGW

把解压好的mingw64文件夹复制到CLion-Environment中,具体如下:

在系统的环境变量中加入一条:

打开命令行,输入:

cmd 复制代码
gcc -v

说明安装成功。如果不成功,可以试试重启电脑,重新输入这行指令。

2.1.3.配置gcc-arm

把解压好的arm-gnu-toolchain-14.2.rel1-mingw-w64-x86_64-arm-none-eabi文件夹复制到CLion-Environment中,具体如下:

添加系统环境变量如下:

打开命令行,输入:

cmd 复制代码
arm-none-eabi-gcc -v

说明安装成功。如果不成功,可以试试重启电脑,重新输入这行指令。

2.1.4.配置CLion

注意:每次设置完环境变量都必须重启CLion!

打开CLion,进入设置:

选择嵌入式开发选项卡,配置路径,并进行测试:

完成后点击右下角应用

新建一个MinGW工具链:

设置如下:

然后配置CMake:

至此所有环境配置完成。

注意:每次设置完环境变量都必须重启CLion!

2.2.验证环境

点个灯看一下。

2.2.1.新建CLion工程

在CLion中新建项目:

创建好后会有一个.ioc文件:

直接双击,通过STM32CubeMX打开:

2.2.2.配置CubeMX

默认芯片是STM32F030F4P,点击左上角更改芯片:

配置IO、时钟的过程略,具体可以参考这篇:【软件入门】STM32CubeMX快速入门-CSDN博客

如果你使用的是H7系列,也可以参考这篇:STM32H7开发笔记(1)------H7基本配置_stm32 h7-CSDN博客

配置完IO和时钟树后,来到Project Manager,配置如下:

路径需要一致:

然后配置Code Generator如下:

配置好后,点击GENERATE CODE,会提示你已经存在文件,直接覆盖即可。生成完毕后回到CLion:

这个暂时不用管,直接跳过即可。

2.2.3.相关代码

main.c相应位置添加小灯代码:

c 复制代码
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    HAL_GPIO_TogglePin(LED0_GPIO_Port, LED0_Pin);
    HAL_Delay(500);
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
2.2.4.编译

打开设置,选择使用STM32这个工具链,也可以直接设成默认:

回到代码,右上角出现五个东西,分别是Debug配置、编译配置、编译、烧录、调试:

点击编译:

可以成功编译。

2.2.5.烧录

右上角编辑配置:

新建一个OpenOCD:

先把这几个配置好:

为什么要命名为STM32H750VBT6-ST-Link?因为使用OpenOCD时,不同芯片(常见的F103系列、F4xx、H7xx等)、不同下载器(ST-Link、J-Link、DAP-Link等)要对应不同的.cfg文件,所以为了便于区分和无缝切换,命名尽量完整。

然后右下角应用更改并确定,然后关闭配置,此时会显示红叉表示配置有问题,但是暂时不用管。

在工程根目录下创建一个 STM32H750VBT6-ST-Link.cfg文件:

编辑内容如下:

# 设置ST-Link
source [find interface/stlink.cfg]

# 设置SW模式
transport select hla_swd

# 设置H7系列
source [find target/stm32h7x.cfg]

# 设置下载速度/KHz
# 10000 = 10MHz
adapter speed 10000

# 设置Flash大小
# 0x20000 = 128K Flash Size
set FLASH_SIZE 0x20000

然后配置面板配置文件,点击...进行配置:

配置好后选择刚刚配置的运行配置,然后点击运行(平时如果不想看编译后的资源占用情况,可以不点编译直接点运行,因为如上图所示,运行前会先进行编译),等待一会即可烧录完成:

会打印一些信息,但是不需要管,已经下载完成了,开发板上的灯也开始闪了。

2.2.6.烧录补充

烧录的关键在于Config文件,我们会使用不同的主控,也会使用不同的下载器。对于不同的主控,需要修改的是:

# 设置H7系列
source [find target/stm32h7x.cfg]

# 设置Flash大小
# 0x20000 = 128K Flash Size
set FLASH_SIZE 0x20000

这两部分;

对于不同的下载器,需要修改的是:

# 设置ST-Link
source [find interface/stlink.cfg]

# 设置SW模式
transport select hla_swd

这两部分。

而下载速度这里:

# 设置下载速度/KHz
# 10000 = 10MHz
adapter speed 10000

一般不需要改,如果真的烧录失败再调低即可。

举两个例子。本人常用的主控还有STM32F103C8T6,如果使用这款主控,那需要修改为:

# 设置F1系列
source [find target/stm32f1x.cfg]

# 设置Flash大小
# 0x10000 = 64K Flash Size
set FLASH_SIZE 0x10000

本人常用的下载器还有PWLink2,属于CMSIS-DAP,所以修改如下:

# 设置CMSIS-DAP
adapter driver cmsis-dap

# 设置SW模式
transport select swd

结合一下,STM32H750VBT6-ST-Link.cfg文件中内容如下:

# 设置ST-Link
source [find interface/stlink.cfg]

# 设置SW模式
transport select hla_swd

# 设置H7系列
source [find target/stm32h7x.cfg]

# 设置下载速度/KHz
# 10000 = 10MHz
adapter speed 10000

# 设置Flash大小
# 0x20000 = 128K Flash Size
set FLASH_SIZE 0x20000

STM32F103C8T6-PW-Link.cfg文件中内容如下:

# 设置CMSIS-DAP
adapter driver cmsis-dap

# 设置SW模式
transport select swd

# 设置F1系列
source [find target/stm32f1x.cfg]

# 设置下载速度/KHz
# 10000 = 10MHz
adapter speed 10000

# 设置Flash大小
# 0x10000 = 64K Flash Size
set FLASH_SIZE 0x10000

如果你的开发任务比较多,可能会使用多种主控,这时候就更建议提前写好各Config文件,并且注意命名区分,从而减少开发时的工作量:

关于非ST芯片、非ST-Link、非CMSIS-DAP如何烧录,目前暂不作了解。可以参考D:\CLion-Environment\OpenOCD-20240916-0.12.0\share\openocd\scripts路径下的相关配置文件。

2.2.7.调试

为了演示,加个没啥意义的计数器,同时打个断点:

c 复制代码
int main(void)
{
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  
  /* USER CODE BEGIN 2 */
  int cnt = 0;
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    // HAL_GPIO_TogglePin(LED0_GPIO_Port, LED0_Pin);
    HAL_Delay(500);
    cnt ++;
    cnt = cnt % 10;
    if (cnt == 0)
      HAL_GPIO_TogglePin(LED0_GPIO_Port, LED0_Pin);
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

然后点右上角的小虫子进入调试(调试之前也会自动编译):

与Keil的调试不同,CLion的调试会直接开始运行程序(应该可以设置,目前还没研究明白)。可以看到,查看变量有两种方式,一种是添加到监视器,一种直接鼠标悬停到变量处,两种都非常方便。

目前使用CLion调试时会出现变量被编译器优化掉的问题,如:

可以看到,由于这个变量完全没用,已经被编译器自动优化掉了。打开CMakeLists.txt,找到下发红框的代码,在这一段代码上方加入两行代码:

cmake 复制代码
set(CMAKE_C_FLAGS_DEBUG "-g -O0")
set(CMAKE_CXX_FLAGS_DEBUG "-g -O0")

但是还是会被优化掉,没有用。但是考虑到平时不会写这么没用的变量,暂时先不管。

在考虑能否用CLion替代Keil开发时,一个很重要的考虑因素就是能否用CLion查看寄存器。答案是可以的。

进入调试后,点击外设

然后在Keil的安装路径下搜索svd文件夹:

不同系列芯片的.svd文件命名方式略有不同:

回到CLion,点击加载.svd文件,选择自己芯片对应的文件,然后全选寄存器即可:

3.实现ESP32开发

3.1.配置ESP32开发环境

3.1.0.卸载旧环境(存疑)

如何卸载ESP-IDF:可下载的 ESP-IDF 工具 - ESP32-S3 - --- ESP-IDF 编程指南 v5.4 文档 (espressif.com)

与STM32的开发不同,用CLion开发STM32并不需要卸载Keil的相关环境,但如果以前配置过VSCode+ESP-IDF开发方式,建议先把VSCode配置的ESP-IDF插件卸载(不用卸载VSCode),同时在文件夹中删除相关配置文件。如果以前配置过老版ESP-IDF,建议也先卸载掉。

似乎可以实现多版本ESP-IDF共存(类似多版本JAVA共存),可以参考这位大佬的文章:最新版ESP32 IDF环境搭建教程:基于CLION安装ESP32开发环境IDF(含同时安装多个IDF教程)-CSDN博客

本篇文章不涉及多版本IDF,只是单版本配置,对笔者的开发要求而言已经足够。

3.1.1.配置MinGW

与2.1.1.的内容完全一样,如果刚刚已经配过就不用管了,可以直接跳到下一节。为了方便阅读,我复制过来。

把解压好的mingw64文件夹复制到CLion-Environment中,具体如下:

在系统的环境变量中加入一条:

打开命令行,输入:

cmd 复制代码
gcc -v

说明安装成功。如果不成功,可以试试重启电脑,重新输入这行指令。

3.1.2.配置ESP-IDF

双击esp-idf-tools-setup-offline-5.3.2.exe进行安装,选择简体中文,并同意协议,然后会自动检查:

然后点击应用修复:

完毕后点击下一步:

选择好安装路径,ESP-IDF已经为它自己准备了单独的Espressif文件夹。然后点击下一步:

建议下面的所有选项全选,快捷方式随意,点击下一步:

点击安装即可。安装过程中需要信任的都选择信任即可。安装完成后界面如下:

勾选三个选项,点击完成。会自动启动一个CMD命令行,一个PowerShell,打开了一个PDF。CMD和PowerShell内容如下:

关注红框部分,有这部分内容说明安装成功。打开环境变量核实一下:

如果有红框中的这两个变量,则说明没问题。如果仅有一个或者一个都没有,如下所示:

则需要手动添加,点击新建:

在系统环境变量中加入一条:

这一条放到所有环境最下方即可。

配置完成或检查完毕后,保存关闭。在windows命令行中输入python查看能否检测到:

只要能检测到就行。

3.2.配置CLion并验证环境(插件版)(推荐)

插件首页:ESP-IDF Plugin for CLion | JetBrains Marketplace

插件文档:ESP-IDF for CLion | ESP-IDF for Clion 文档 (yunyizhi.github.io)

3.2.1.配置CLion并新建工程

注意:每次设置完环境变量都必须重启CLion!

打开CLion,在终端中输入python:

没有问题。打开设置,在插件中搜索ESP-IDF

安装这个插件,然后重启CLion。

新建项目,选择ESP IDF,然后根据个人情况配置红框部分如下:

其中,位置这一栏,D:\Programmes\Clion_Test\ESP32是路径,test0是工程名;Install Path是刚刚安装ESP-IDF的路径;Target选择你开发板的型号即可。配置好后点击创建,如果创建成功就需要稍等一会,第一次创建有可能失败,如下图所示:

command [cmd.exe, /c, "call "C:\Users\Fangzhou Tan\AppData\Roaming\JetBrains\CLion2024.3\org.btik.espidf\export_4d168f21.bat" 1>&2 && "D:\Installation Files\Jetbrains\CLion\jbr\bin\java" -cp "D:\Installation Files\Jetbrains\CLion\lib\util_rt.jar" com.intellij.util.ReadEnv > "C:\Users\FANGZH~1\AppData\Local\Temp\intellij-cmd-env-data.14177518295117809758.tmp" || exit /B %ERRORLEVEL%"], exit code: 1

如果出现这个报错,则采用这种方式创建项目:

如果还有这个报错,可以多试几次。

不论使用哪种方式,第一次创建时均可能失败,根据插件手册描述,再试一遍即可。

若能成功创建,则需要等待很长时间加载项目:

创建完毕后设置端口:

一般只用得到这两个功能,编译、USB串口监视、USB串口烧录:

注意使用这个方法创建完工程后,工具链那里会自动生成一个这样的东西:

**这个东西千万不能删!**因为CMake需要用这个工具链:

3.2.2.编译工程

双击CMake Build

3.2.3.使用USB串口烧录并监视

把官方hello_world.c文件中的代码复制过来:

c 复制代码
/*
 * SPDX-FileCopyrightText: 2010-2022 Espressif Systems (Shanghai) CO LTD
 *
 * SPDX-License-Identifier: CC0-1.0
 */

#include <stdio.h>
#include <inttypes.h>
#include "sdkconfig.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_chip_info.h"
#include "esp_flash.h"
#include "esp_system.h"

void app_main(void)
{
    printf("Hello world!\n");
	printf("Hello world!\n");

    /* Print chip information */
    esp_chip_info_t chip_info;
    uint32_t flash_size;
    esp_chip_info(&chip_info);
    printf("This is %s chip with %d CPU core(s), %s%s%s%s, ",
           CONFIG_IDF_TARGET,
           chip_info.cores,
           (chip_info.features & CHIP_FEATURE_WIFI_BGN) ? "WiFi/" : "",
           (chip_info.features & CHIP_FEATURE_BT) ? "BT" : "",
           (chip_info.features & CHIP_FEATURE_BLE) ? "BLE" : "",
           (chip_info.features & CHIP_FEATURE_IEEE802154) ? ", 802.15.4 (Zigbee/Thread)" : "");

    unsigned major_rev = chip_info.revision / 100;
    unsigned minor_rev = chip_info.revision % 100;
    printf("silicon revision v%d.%d, ", major_rev, minor_rev);
    if(esp_flash_get_size(NULL, &flash_size) != ESP_OK) {
        printf("Get flash size failed");
        return;
    }

    printf("%" PRIu32 "MB %s flash\n", flash_size / (uint32_t)(1024 * 1024),
           (chip_info.features & CHIP_FEATURE_EMB_FLASH) ? "embedded" : "external");

    printf("Minimum free heap size: %" PRIu32 " bytes\n", esp_get_minimum_free_heap_size());

    for (int i = 10; i >= 0; i--) {
        printf("Restarting in %d seconds...\n", i);
        vTaskDelay(1000 / portTICK_PERIOD_MS);
    }
    printf("Restarting now.\n");
    fflush(stdout);
    esp_restart();
}

双击Flash and Monitor就会自动编译、烧录、监视一键三连:

输出没有问题:

3.2.4.使用JTAG烧录并调试

使用JTAG需要注意板卡的接线是否正确,同时可能需要修改端口。确认好端口后,点击小三角运行:

即可完成编译、JTAG烧录:

使用JTAG是无法进行监视的。

下面开始调试,需要注意的是在调试之前需要将程序编译完成并完成烧录。打一个断点,然后点击小虫子调试:

ESP有一个自动断点:

不用管,回到我们的程序,点击这个位置即可运行到光标处:

然后就可以进行调试了。比如先运行至最后的for循环,然后再运行一个循环:

可以看到能够正常显示变量值。

其余调试功能可以参阅原作者的文档:Debug | ESP-IDF for Clion 文档 (yunyizhi.github.io)

3.2.5.使用Menuconfig

直接双击:

3.3.配置CLion并验证环境(手动版)(不推荐)

非常不推荐!!!!!

这个方案仅配置好烧录和监视。

3.3.1.配置CLion

注意:每次设置完环境变量都必须重启CLion!

打开CLion,在终端中输入python:

没有问题。使用CLion打开ESP官方的示例工程:

路径如下:

建议把项目复制出来,复制到自己的文件夹里。

信任该项目:

进入设置,新建一个MinGW工具链:

与STM32配置时不同,当时的名字直接是STM32,但这里是ESP32-S3,这是因为对于ESP32而言,不同系列的配置不一样ESP32-C3、ESP32-C6、ESP32-S3都有细微区别,所以为了便于管理,命名细致一些。然后添加环境:

然后继续配置,如下所示:

注意下面红框这里一定要选对型号。以C编译器为例,完整路径如下:

D:\CLion-Environment\Espressif\tools\xtensa-esp-elf\esp-13.2.0_20240530\xtensa-esp-elf\bin\xtensa-esp32s3-elf-gcc.exe

至于为什么要这么选,可以看4.1.2.小节。

注意:如果使用C3等其他RISC-V架构主控,则要选择这个路径下的gcc:

D:\CLion-Environment\Espressif\tools\riscv32-esp-elf\esp-13.2.0_20240530\riscv32-esp-elf\bin\riscv32-esp-elf-gcc.exe

然后配置CMake:

点击应用,但先不用关闭设置界面。

一般ESP32-S3开发板/核心板/最小系统板会搭载2个micro-USB或USB-C口,需要看好哪个连接了CH340芯片,我们需要使用这个接口。连线至电脑,打开设备管理器:

记住这个端口,以后开发ESP32时尽量不要更改。回到CLion的设置,配置CMake的环境变量:

第一行是型号,第二行是上传波特率,第三行是端口。配置完后应用并退出。然后重新加载一下:

可以看到可以成功加载CMake项目:

至此所有环境配置完成。

注意:每次设置完环境变量都必须重启CLion!

3.3.2.编译示例工程

先使用ESP官方示例工程hello_world试一下。

切换至app,然后点击小锤子编译:

第一次编译要等很长时间:

说明没有问题。

3.3.3.使用USB串口烧录

选择flash

即可成功烧录至Flash。

打开ESP-IDF CMD,输入:

cmd 复制代码
python -m esp_idf_monitor

然后有源源不断的信息,说明烧录成功:

3.3.4.使用USB串口监视

编辑配置:

新建一个CMake应用程序:

配置如下:

选择配置,然后点击小三角运行:

等待一会,就可以看到终端中的在打印信息了:

注意:以后基本都用这个配置,可以一键三连(编译、烧录、监视)。

网上存的一个图(找不到原作者了,如果有原作者看到麻烦给个链接吧!)引用一下:

4.附

4.1.部署过程中可能遇到的问题及解决方案

本节简单列一列笔者配环境过程中遇到的问题。

4.1.1.更改环境路径导致CMake无法加载项目

具体体现在CMake加载项目中报错,报错中的路径为老环境的路径。

解决办法:手动检查环境变量,并使用命令行验证是否配置成功。如果是环境变量没有配置好,则重新配置环境变量;如果环境变量配好了,CMake还是无法加载项目,则重启CLion,然后再使用CMake重置缓存并重新加载项目

4.1.2.ESP32编译时间过慢

不论是使用CLion还是VSCode作为IDE,亦或是直接使用ESP-IDF命令行,编译时间动辄20多分钟。

挖个坑吧,后面开发ESP32的时候再解决这个问题。

4.1.3.配置ESP时如何选择C编译器和C++编译器

在网上找的教程好像有很多人选择不配置,但是我没配置C编译器和C++编译器时会报错如下:

无法启动 CMake 可执行文件 'D:\CLion-Environment\Espressif\tools\cmake\3.30.2\bin\cmake.exe': 加载环境文件 'D:\CLion-Environment\Espressif\idf_cmd_init.bat' 时出错: 'command [cmd.exe, /c, "call D:\CLion-Environment\Espressif\idf_cmd_init.bat 1>&2 && "D:\Installation Files\Jetbrains\CLion\jbr\bin\java" -cp "D:\Installation Files\Jetbrains\CLion\lib\util_rt.jar" com.intellij.util.ReadEnv > "C:\Users\FANGZH~1\AppData\Local\Temp\intellij-cmd-env-data.2136634674058088131.tmp" || exit /B %ERRORLEVEL%"], exit code: 1' 配置 禁用配置文件

我参考STM32的配置,猜想是不是也需要配置C编译器和C++编译器,于是配置如下:

但是还是有问题:

当时还尝试了点别的办法,也思考了一下ESP是怎么编译的:

可以看到错误内容是D:\InstallationFilesNoSpaces\CLion-ESP-Environment\Espressif/tools/cmake/project.cmake这个文件不存在,但是我们在CMakeLists.txt中设置的文件路径为$ENV{IDF_PATH}/tools/cmake/project.cmake,而刚刚我们设置环境变量时设置了IDF_PATH的值为D:\InstallationFilesNoSpaces\CLion-ESP-Environment\Espressif\frameworks\esp-idf-v5.3.2,也就是说我们想找的文件应该为D:\InstallationFilesNoSpaces\CLion-ESP-Environment\Espressif\frameworks\esp-idf-v5.3.2/tools/cmake/project.cmake,这个文件是真实存在的。为什么会出现CMake找文件的路径和我们设置的不一样呢?

但是最后也没法解决这个问题。于是开始排除问题:我是ESP-IDF的安装出现了问题还是CLion配置过程中出现了问题?于是参考正点原子教程,使用ESP-IDF命令行尝试编译。

新建一个空文件夹:

打开ESP-IDF CMD输入:

cmd 复制代码
idf.py create-project --path D:\Programme\CLion_Test\ESP32\test0 test0

进入这个路径:

cmd 复制代码
cd D:\Programme\CLion_Test\ESP32\test0

然后创建组件:

cmd 复制代码
idf.py create-component component

根据自己的主控型号,输入:

cmd 复制代码
idf.py set-target esp32s3

经过漫长的等待,发现是可以成功设置target的:

然后输入:

cmd 复制代码
idf.py build

经过20分钟的等待,没有出现任何问题,成功编译,说明并不是ESP-IDF存在问题,是CLion配置存在问题。于是翻找命令行,最终找到了这一段:

Ninja对应的是CLion中的构建(build)工具,而下面两个分别是C compilerCxx compiler,正好对应CLion中的C编译器C++编译器,于是在CLion中进行设置:

最终CMake可以成功加载项目,也可以成功编译!

**一点启发:**ESP环境配置资料相对较少,也相对麻烦,所以遇到问题后需要自己思考问题出在哪里。不管是用VSCode还是CLion作为IDE,如果用的是先安装ESP-IDF再配置IDE的方式,建议先花点时间用命令行捣鼓一下,确定ESP-IDF本体的安装没问题后再配置IDE。此时如果IDE中出现了报错,那多半就是IDE的配置有问题而非ESP-IDF有问题。

4.1.4.配置ESP环境时的常见问题及可能的解决方案
4.1.4.1.CMake Error at D:/...tools/cmake/targets.cmake:108 (message):

在设置主控型号时可能报错如下:

CMake Error at D:/CLion-Environment/Espressif/frameworks/esp-idf-v5.3.2/tools/cmake/targets.cmake:108 (message):
   Target 'esp32' in sdkconfig 'D:/Programme/CLion_Test/ESP32/hello_world/sdkconfig' does not match currently selected IDF_TARGET 'esp32s3'. To change the target, clear the build directory and sdkconfig file, and build the project again.
Call Stack (most recent call first):
  D:/CLion-Environment/Espressif/frameworks/esp-idf-v5.3.2/tools/cmake/project.cmake:24 (__target_init)
  CMakeLists.txt:5 (include)

打开sdkconfig文件,搜索target,注意这里的值要与环境变量一致,如果不一致,则手动修改:

然后再重新加载即可。

4.1.4.2.无法启动 CMake 可执行文件 加载环境文件

如果出现这个报错:

完整报错信息如下:

无法启动 CMake 可执行文件 'D:\CLion-Environment\Espressif\tools\cmake\3.30.2\bin\cmake.exe': 加载环境文件 'D:\CLion-Environment\Espressif\idf_cmd_init.bat' 时出错: 'command [cmd.exe, /c, "call D:\CLion-Environment\Espressif\idf_cmd_init.bat 1>&2 && "D:\Installation Files\Jetbrains\CLion\jbr\bin\java" -cp "D:\Installation Files\Jetbrains\CLion\lib\util_rt.jar" com.intellij.util.ReadEnv > "C:\Users\FANGZH~1\AppData\Local\Temp\intellij-cmd-env-data.4141069438686427598.tmp" || exit /B %ERRORLEVEL%"], exit code: 1' 配置 禁用配置文件

[已取消重新加载]

说明CMake无法成功加载D:\CLion-Environment\Espressif\idf_cmd_init.bat这个脚本。如果产生这个报错或者类似的报错,进入windows的命令行,输入命令(不要关闭CLion):

cmd 复制代码
D:
cd D:\CLion-Environment\Espressif\idf_cmd_init.bat

如果能正确执行,返回CLion,重新加载CMake项目即可。

4.2.4.3.运行Create Project时出错

可能的解决方式是多试几次,感觉很玄学,没有改动其他任何地方,只是多试了几次就没这个报错了。

4.2.开发过程中的技巧

4.2.1.CLion代码风格设置

由于基础工程是由STM32CubeMX生成,所以有些代码风格可能与自己风格不符。因此,推荐在CLion中进行设置。具体风格自己设置即可,在设置时可以预览该设置带来的影响,很直观。

设置好后可以导出方案,放到一个自己好找的地方。后续创建新工程时,一般会自动使用自己设置好的方案,但是有时也会出现不使用自己方案的情况。此时需要导入方案,应用后记得重新加载CMake。

相关推荐
Turnin111111 小时前
Linux系统下速通stm32的clion开发环境配置
stm32·单片机·嵌入式硬件
【ql君】qlexcel9 小时前
STM32的ADC工作模式
stm32·同步·adc·工作模式·规则组·注入组·交叉
2401_843785239 小时前
STM32 GPIO
stm32·单片机·嵌入式硬件
shdbdndj11 小时前
STM32单片机:GPIO模式
stm32·单片机·嵌入式硬件
2401_8437852312 小时前
STM32简介
stm32·单片机·嵌入式硬件
【 STM32开发 】12 小时前
STM32_SD卡的SDIO通信_基础读写
stm32·cubemx·sd卡·tf卡·sdio
大专生学编程16 小时前
基于ESP32-IDF驱动GPIO输出控制LED
嵌入式硬件·esp32·esp-idf
7yewh18 小时前
嵌入式知识点总结 ARM体系与架构 专题提升(四)-编程
arm开发·stm32·单片机·嵌入式硬件·mcu·物联网·51单片机
小关12320 小时前
STM32补充——FLASH
stm32·单片机·嵌入式硬件