MAC(Apple Silicon)嵌入式基于Clion(stm32CubeMX)环境搭建

1、软件包准备,下载自己对应的版本

Clion :Clion下载地址

STM32CubeMX:STM32CubeMX下载地址

STM32Cube CLT:STM32Cube CLT下载地址

2、安装

2.1 安装Clion 默认安装就行

2.2安装STM32CubeMX默认安装就行

2.3安装STM32Cube CLT 默认安装就行

STM32Cube CLT解压出来有STM32Cube CLT和st-link,两个都安装

安装目录一般在/opt/ST/STM32Cube CLT+版本号

2.4安装openocd

可以直接通过homebrew安装

bash 复制代码
brew install openocd

在终端输入which openocd查看命令可以查看安装位置

可以直接通过homebrew安装

bash 复制代码
brew install stlink
#以下命令应该能检测到该stlink
st-info --probe

2.5安装ARM-GCC工具链

安装完STM32Cube CLT会自带,根据实际情况自行验证是否需要安装。

可以直接通过homebrew安装(需科学上网)

bash 复制代码
brew tap ArmMbed/homebrew-formulae
brew install arm-none-eabi-gcc
#查看版本信息
arm-none-eabi-gcc -v

有信息则安装成功

3、软件环境配置

3.1 Clion配置

3.1.1 CLion 工具链配置

打开 CLion -> Settings (Cmd+,) -> Build, Execution, Deployment -> Toolchains,点击 + 添加一个 Custom 工具链,命名为 STM32CubeCLT,填入以下路径:

C Make:

/opt/ST/STM32CubeCLT_1.22.0/CMake/bin/cmake

Make:

/opt/ST/STM32CubeCLT_1.22.0/Make/bin/make (可不用配置,STM32 的 CMake 工程实际用的是 Ninja 构建,Make 字段可以直接留空。CLion 只需要 CMake + Ninja + 编译器就够了。留空不会影响任何编译和调试功能。)

Ninja:

/opt/ST/STM32CubeCLT_1.22.0/Ninja/bin/ninja

C Compiler:

/opt/ST/STM32CubeCLT_1.22.0/GNU-tools-for-STM32/bin/arm-none-eabi-gcc

C++ Compiler:

/opt/ST/STM32CubeCLT_1.22.0/GNU-tools-for-STM32/bin/arm-none-eabi-g++

Debugger:

/opt/ST/STM32CubeCLT_1.22.0/GNU-tools-for-STM32/bin/arm-none-eabi-gdb

如果 CubeCLT 没有自带 gdb,用 Homebrew 装一个:brew install arm-none-eabi-gdb,路径在 /opt/homebrew/bin/arm-none-eabi-gdb。

填完后所有项前面应该出现绿色勾号。同时去 Settings -> Plugins 确认 Embedded Development 和 STM32CubeMX 插件是启用状态(CLion 2026 默认内置)。

问题一:Debugger "Not found" + "deprecated"

arm-none-eabi-gdb 文件确实在 /opt/ST/STM32CubeCLT_1.22.0/GNU-tools-for-STM32/bin/ 下,版本 15.2.90,可以正常运行。报错原因是 CLion 2026 废弃了工具链级别的 Debugger 字段,改用新的 "Debug Profiles" 机制。

解决办法:直接忽略这个报错。 工具链里的 Debugger 字段在 CLion 2026 中已经不使用了。调试器会在后面配置 Embedded GDB Server 运行配置时单独指定,到那里填 gdb 路径即可正常工作。

如果你想消除红色提示,也可以在工具链里把 Debugger 字段留空,反正它已经不生效了。

问题二:"Test CMake run finished with errors"

这是 交叉编译工具链的正常现象,不是错误。CLion 检测工具链时会跑一个 CMake 测试编译,但 arm-none-eabi-gcc/g++ 是交叉编译器,编出来的是 ARM 架构的二进制,无法在 Mac 上直接运行,所以 CMake 的 try_run 步骤必然失败。

关键结论:这个报错可以安全忽略。 你实际的 STM32 工程构建不会受影响,因为 STM32CubeMX 生成的 CMakeLists.txt 会指定正确的交叉编译工具链文件(arm-none-eabi-gcc.cmake),编译目标也是 ARM elf,不需要在宿主机上运行。

验证方式很简单:直接用 CubeMX 生成一个工程导入 CLion,Cmd + F9 编译,如果能正常生成 .elf 文件就说明工具链完全没问题。

总结:两个提示都不影响实际使用。 工具链配好后,接下来走正常流程------CubeMX 生成 CMake 工程 -> CLion 打开 -> 编译 -> 配置 Embedded GDB Server 调试。你现在已经可以进入第二步,用 STM32CubeMX 创建工程了。

3.1.2打开软件 点击 new project 创建新项目

基础配置

1- 选择STM32CubeMX

2 - STM32CubeMX/STM32CubeCLT配置

根据实际情况填入安装路径

openocd配置

3-启动STM32CubeMX配置项目

3.2 STM32CubeMX配置

bash 复制代码
大致步骤
打开 STM32CubeMX -> File -> New Project -> 搜索 STM32F103C8T6 -> Start Project

配置外设(在 Pinout 视图):
- SYS -> Debug -> 选 Serial Wire(SWD 调试,ST-Link 必须开这个)
- RCC -> High Speed Clock (HSE) -> 选 Crystal/Ceramic Resonator
- 点击 PA5 -> 选 GPIO_Output(板载 LED)
- USART1 -> Mode -> Asynchronous(串口调试用)
【在 STM32CubeMX 界面的左侧栏操作,具体步骤:
1. 确认你在 Pinout & Configuration 标签页(顶部第一个标签)
2. 左侧面板找到 Categories 分组
3. 展开找到 Connectivity 分类
4. 点击里面的 USART1
5. 在芯片图下方的配置区域,会看到 Mode 下拉框,默认是 Disable
6. 点开下拉框,选 Asynchronous
选完后右侧 PA9 会自动变成 USART1_TX,PA10 变成 USART1_RX,不需要手动点引脚。
如果左侧列表太长找不到,可以切到 A-Z 视图(左侧面板顶部有 Categories / A-Z 两个切换标签),按字母顺序更快定位到 USART1。
配置完波特率的话,在下面 Parameter Settings 子标签里,把 Baud Rate 改成 115200(默认通常就是 115200,确认一下即可)。】

时钟配置:进入 Clock Configuration 标签,HCLK 输入 72 回车,自动算好分频。

工程设置(关键):进入 Project Manager 标签:
- Toolchain / IDE 必须选 CMake(不是 STM32CubeIDE)
- 勾选 Generate peripheral initialization as a pair of '.c/.h' files
- 勾选 Keep User Code 区域
【勾选 Keep User Code 后,你在这些 BEGIN / END 标记之间写的所有代码,在重新生成工程时会被完整保留。CubeMX 只会更新标记外面的 HAL 初始化代码。
实际场景: 比如你写了一半的串口通信逻辑,突然想给 PA0 加个外部中断。回到 CubeMX 配好引脚,点 GENERATE CODE,重新生成后你的串口代码还在,只是多出来一个 EXTI 的初始化函数。如果不勾选,重新生成时标记之间的代码也会被清空。
核心原则: 你自己的业务代码永远写在 USER CODE BEGIN 和 USER CODE END 之间,不要写在标记外面,否则一律会被覆盖掉。】

点击 GENERATE CODE,完成后关闭,不要用 CubeMX 直接打开。

启动后点击ACCESS TO MCU SELECTOR或者ACCESS TO BOARD SELECTOR

选择芯片

1 选择自己的芯片

2 确定具体型号

3 可视化配置项目

Debuge模式调整

STM32系列芯片通常使用ST-link,设置一下Debuge模式

RCC时钟选择

根据自己需要设置

引脚始化配置(根据自己需求设置)

配置Project Manager

从上往下分别是项目名、保存路径、IDE类型

3.3 CLion 打开工程并编译

  1. CLion -> Open -> 选 CubeMX 生成的工程目录(含 CMakeLists.txt)
  2. 弹出工具链选择时选 STM32CubeCLT
  3. Cmd + F9 编译,第一次会慢一些(编译 HAL 库),后续增量编译很快
    问题一:CLion 给交叉编译器传了 macOS 原生的 -arch arm64 参数
    工程里有 CubeMX 生成的工具链文件 cmake/gcc-arm-none-eabi.cmake,它设置了 CMAKE_SYSTEM_NAME=Generic 来告诉 CMake 这是交叉编译。但 CLion 没有用它,而是直接传了 -DCMAKE_C_COMPILER=...,导致 CMake 以为是 macOS 原生编译,自动加了 -arch arm64 参数。
    修复方法(二选一):
    方法一:让 CLion 使用 CMake Presets(推荐)
    CubeMX 已经生成了 CMakePresets.json,里面配好了工具链文件。让 CLion 直接用它:
  4. Settings -> Build, Execution, Deployment -> CMake
  5. 点击顶部切换按钮,从 Profiles 模式切到 Presets 模式
  6. CLion 会自动读取 CMakePresets.json,显示 Debug 和 Release 两个预设
  7. 选 Debug 预设即可
    这样 CLion 不会再自己传 -DCMAKE_C_COMPILER,而是完全使用 CubeMX 配好的工具链文件。
    方法二:手动加 Toolchain File
    如果找不到 Presets 切换按钮:
  8. Settings -> Build, Execution, Deployment -> CMake
  9. 编辑你的 STM32CubeCLT profile
  10. 在 CMake options 字段里加一行:
    -DCMAKE_TOOLCHAIN_FILE=/Users/替换工程地址/cmake/gcc-arm-none-eabi.cmake
  11. 删掉旧的构建目录 cmake-build-debug-stm32cubeclt,让 CMake 干净地重新配置
    改完后重新加载 CMake,编译命令里就不会再出现 -arch arm64 了。工具链文件里的 CMAKE_SYSTEM_NAME=Generic 和 CMAKE_TRY_COMPILE_TARGET_TYPE=STATIC_LIBRARY 两行会同时解决"交叉编译器无法运行测试程序"的问题。

3.4 Clion 的 Embedded GDB Server设置

参考

第一步:打开配置界面

菜单栏 Run -> Edit Configurations...,弹出配置窗口。左上角点 +,在弹出的列表里找 Embedded GDB Server。如果列表里没有这个选项,说明 Embedded Development 插件没启用,去 Settings -> Plugins 里开启。

第二步:填写 Name

顶部 Name 字段填:

bash 复制代码
Flash & Debug (OpenOCD)

第三步:Target(构建目标)

Target 下拉框点开,选择你的 CMake 构建目标。你的工程名叫 light,所以选 light 这个选项。选完后 Executable Binary 会自动指向 light.elf。

如果下拉列表为空,先确认 CLion 已经成功加载了 CMake(底部状态栏不报错)。CMake 配置成功后目标才会出现在列表里。

第四步:Debugger

Debugger 字段填完整路径(不要只写名字,CLion 2026 不一定自动从工具链找):

/opt/ST/STM32CubeCLT_1.22.0/GNU-tools-for-STM32/bin/arm-none-eabi-gdb

第五步:GDB Server

GDB Server type 下拉选 OpenOCD(选完之后下面的 GDB Server 路径字段会自动出现)。

在 GDB Server 可执行路径字段填:

bash 复制代码
/opt/homebrew/bin/openocd

第六步:GDB Server arguments

在 GDB Server arguments 字段填:

bash 复制代码
-f interface/stlink.cfg -f target/stm32f1x.cfg

这两个路径是相对于 OpenOCD 的 scripts 目录的,OpenOCD 会自动在 /opt/homebrew/share/openocd/scripts/ 下找到它们,不需要写全路径。

第七步:Target remote args

在 Target remote args 字段填:

bash 复制代码
localhost:3333

这是 OpenOCD 启动后监听的 GDB 端口,CLion 通过这个地址连接调试器。

第八步:Before launch(调试前动作)

窗口底部 Before launch 区域:

  1. 点 + -> 选 Build,确保选中的 target 是 light。这样每次点 Debug 时会先编译最新的代码。
  2. 可选:再点 + -> 选 External Tool -> Create New,配置烧录步骤(如果希望调试前单独烧录固件):
bash 复制代码
- Name: OpenOCD Flash
   - Program: /opt/homebrew/bin/openocd
   - Arguments: -f interface/stlink.cfg -f target/stm32f1x.cfg -c "program $CMakeCurrentBuildsDir$/light.elf verify reset exit"
   - Working directory: $ProjectFileDir$

不过通常 Embedded GDB Server 模式下 CLion 会自动加载 elf 到芯片,这一步不是必须的。

第九步:保存并验证

  1. 右下角点 Apply 再点 OK
  2. 接好 ST-Link 和板子(SWD 四线 + 供电)
  3. 点工具栏绿色虫子图标启动调试
    如果一切正常,CLion 会先编译,然后终端里看到 OpenOCD 输出类似:
bash 复制代码
Info : Listening on port 3333 for gdb connections

随后 GDB 连接成功,程序停在 main() 入口处。

快速验证:LED 闪烁

在 main.c 的 while(1) 循环中加入:

HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5); (板子上 LED 在 PA5,不在这个引脚的需要根据板子情况进行修改,修改后STM32CubeMX引脚设置也要修改,并重新生成代码)

HAL_Delay(500);

编译烧录后,板载 LED 应每秒闪烁一次,说明全链路通了。

参考配置CLion用于STM32开发【优雅の嵌入式开发】

相关推荐
嵌入式阿蔡12 小时前
传感器_03:电机驱动——让 GPIO 当指挥官,别让 GPIO 当电源
网络·stm32·单片机·嵌入式硬件·嵌入式实时数据库
树的枝17 小时前
【STM32】03.中断和EXTI外设
笔记·stm32·单片机·嵌入式硬件
单片机杂货铺18 小时前
【单片机毕业设计选题】基于stm32单片机儿童公路车速度检测报警
stm32·单片机·嵌入式硬件·51单片机·硬件工程·课程设计
振南的单片机世界20 小时前
看门狗硬核拆解:1.6秒不喂狗,硬件强制“掀桌子”
arm开发·stm32·单片机·嵌入式硬件
EXI-小洲1 天前
MacOS IDEA将本地项目代码上传至SVN空仓库
macos·svn·intellij-idea
XiHongShi20161 天前
STM32H7 FLASH和SRAM标准例程
stm32·单片机·嵌入式硬件
单片机杂货铺1 天前
【单片机毕业设计选题】基于单片机的智能牛奶保鲜箱设计
人工智能·stm32·单片机·物联网·毕业设计·课程设计
LCG元1 天前
STM32F103 硬件 I2C 驱动 MPU6050:一阶互补滤波姿态解算与零偏校准实测
stm32·单片机·嵌入式硬件
捷瑞电子工坊1 天前
FreeRTOS任务管理:从入门到实践(标准库版)
stm32·嵌入式·freertos·实时操作系统·任务管理·标准外设库·任务挂起与恢复