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。

相关推荐
李永奉5 小时前
STM32-认识STM32
stm32·单片机·嵌入式硬件
La Pulga7 小时前
【STM32】I2C通信—软件模拟
c语言·stm32·单片机·嵌入式硬件·mcu
典则17 小时前
STM32FreeRtos入门(四)——任务状态和调度
stm32·单片机·嵌入式硬件
充哥单片机设计17 小时前
【STM32项目开源】基于STM32的智能天然气火灾监控
stm32·单片机·嵌入式硬件
充哥单片机设计17 小时前
【STM32项目开源】基于STM32的智能仓库火灾检测系统
stm32·单片机·嵌入式硬件
就叫飞六吧19 小时前
普中stm32大Dap烧录流程
stm32
A9better20 小时前
嵌入式开发学习日志38——stm32之看门狗
stm32·嵌入式硬件·学习
小莞尔20 小时前
【51单片机】【protues仿真】基于51单片机智能路灯控制系统
c语言·stm32·单片机·嵌入式硬件·51单片机
辰哥单片机设计1 天前
TT直流减速电机(STM32)
stm32
A9better1 天前
嵌入式开发学习日志36——stm32之USART串口通信前述
stm32·单片机·嵌入式硬件·学习