mac电脑开发嵌入式基于Clion(stm32CubeMX)
电气学生在备赛时期,一定是要接触到入门的嵌入式开发,无论是电赛还是嵌赛,但是市面上大多教程都是基于keil来开发芯片,没mac版本,而B站的STM32课程会使用到STM32CubeIDE这一软件,但是作为一个软件开发者习惯了mac环境下idea,xcode这些优秀IDE,在用keil或者STM32CubeIDE(确实很方便好用,但是Clion会有更优的地方)的时候难免会有点不习惯,于是我在网上找了一些教程,找到了使用Clion来搭载单片机环境开发的方法
一、Clion下载
这个在本人第一篇mac系列博客中能找到,请移步一下看看,这里不进行赘述:
mac用户怎么把代码上传到Gitee(基于Clion)-CSDN博客
二、 STM32系列软件下载
1.STM32CubeMX 是 STMicroelectronics 提供的一款图形化配置工具,旨在帮助开发人员更高效地完成 STM32 微控制器的初始化和外设配置工作。能够大大提高我们对于单片机开发的效率,但只限于STM32系列芯片
STM32CubeMX:https://www.st.com/zh/development-tools/stm32cubemx.html#get-software
这时我们还需要下载STM32Cube CLT:它包含了我们需要使用到的CMake、GCC、Ninja、STLink
STM32Cube CLT:https://www.st.com/en/development-tools/stm32cubeclt.html#get-software
三、ST-link下载
不安装的话检测不到stlink。
可能是我电脑的原因,下载完STM32Cube CLT后我的电脑还是检测不到ST-link,所以我们手动下载一个st-link就OK了
st-link官网下载:https://www.st.com/en/development-tools/st-link-server.html
brew install stlink
# 插入stlink后以下命令应该能检测到该stlink
st-info --probe
四、Clion配置
这里大家可以自行选择,也可以去网上买一个激活码用完整版的
4.1 注册
之后需要登陆注册,有账号的登陆,没有的注册一个就行
注册好后我们重启Clion
4.2 新建项目
点击新建项目后大家可以发现:我们的Clion是支持直接创建STM32CubeMX项目的,点击STM32CubeMX我们可以看到,Clion自动会帮我们找到我们CubeMX与CubeCLT的位置
注意:如果Clion没有自动找到CubeMX与CubeCLT的位置,需要大家自己寻找一下,手动配置
4.3 启动STM32CubeMX配置准备
4.3.1 点击访问MCU选择器
4.3.2 选择芯片
4.4 可视初始化设置
4.4.1 Debuge模式
由于STM32系列芯片通常使用ST-link,所以我们要设置一下Debuge模式
4.4.2 点灯初始化配置
由于我是用b站一个up主自己画的STM32学习板,所以初始化配置大家仅供参考,只是教大家怎么使用这个方法的过程
将PA6设置为输出模式
右键给标签取个名字
4.4.3 配置Project Manager
生成代码后,会弹出这个弹窗,我们点击打开工程文件夹
4.4.4 把工程文件移到Clion里
这一步非常简单,我们刚才不是打开了工程所在的文件夹吗,把整个文件夹移到CLion这个图标上
点击信任此项目
这样,我们刚才配置的代码就移入Clion了
4.4.5 选择面板配置文件
根据自己型号选择
4.4.6 运行调试配置
随后重启,再重新把工程拖入Clion,这时候会出现配置设置
这里直接按确定就行
4.4.7 配置文件内容
# stm32f103c8t6 stlink-v2.cfg
# 文件名可以随便取,放到 board 文件夹中方便在 CLion 中选择
# 使用 stlink-v2 调试器
source [find interface/stlink.cfg]
# 使用 hla_swd 调试接口
transport select hla_swd
# 目标芯片设定为 STM32F1 系列
source [find target/stm32f1x.cfg]
# 不使用复位接口
reset_config none
这个文件是一个 OpenOCD 配置文件,通常用于在嵌入式开发中连接调试器(如ST-Link)和目标芯片(如STM32F103C8T6),以便进行程序下载(烧录)和调试(比如单步、断点、查看变量等)。
下面我们逐行详细解释这个文件的内容,让你彻底明白它是干什么的、每句话是什么意思。
文件名说明
# stm32f103c8t6 stlink-v2.cfg
# 文件名可以随便取,放到 board 文件夹中方便在 CLion 中选择
- 这两行是注释,不会影响程序运行。
- 第一行说明这个配置文件是为 STM32F103C8T6 芯片 + ST-Link V2 调试器 准备的。
- 第二行说明:这个文件的名字可以自己起,但建议放到 OpenOCD 的
board/
目录下,这样在 IDE(如 CLion + PlatformIO 或 STM32CubeIDE)中可以选择它。
✅ 小知识:OpenOCD 是一个开源的调试工具,支持 JTAG/SWD 接口,用来和 STM32 等 MCU 通信。
第一行:指定调试器接口
source [find interface/stlink.cfg]
- 作用:告诉 OpenOCD 使用哪种调试器(这里是 ST-Link V2)。
source
是 Tcl 脚本语言中的“包含”命令,意思是“加载另一个配置文件”。[find interface/stlink.cfg]
表示在 OpenOCD 安装目录中查找interface/stlink.cfg
这个文件。
📌 这个 stlink.cfg
文件里定义了:
- 使用的是 ST-Link 调试器
- 通信方式是 SWD 或 JTAG
- USB 识别信息等
💡 举个例子:这就像是你告诉电脑“我要用鼠标”,然后系统加载鼠标驱动。
第二行:选择传输方式(调试接口类型)
transport select hla_swd
- 作用:选择调试通信协议,这里使用 SWD 模式(Serial Wire Debug)。
hla_swd
中的hla
是 "High Level Adapter" 的缩写,表示兼容 ST-Link、J-Link 等通用调试器的抽象层。- STM32 支持两种主要调试接口:
- JTAG:引脚多,功能强
- SWD:只需要 2 根线(SWCLK 和 SWDIO),更常用,推荐使用
✅ 所以这行的意思是:“我用的是 ST-Link,走 SWD 协议来和芯片通信”。
第三行:指定目标芯片
source [find target/stm32f1x.cfg]
- 作用:告诉 OpenOCD 当前要调试的芯片是 STM32F1 系列(比如你用的 STM32F103C8T6 就属于这个系列)。
target/stm32f1x.cfg
是 OpenOCD 内置的一个配置文件,里面包含了:- STM32F1 系列的内存布局(Flash、RAM 地址)
- 如何复位芯片
- Flash 编程算法
- 内核类型(Cortex-M3)
💡 这相当于告诉调试器:“我现在要控制的是一个 STM32F1 的芯片,它内部是怎么工作的我知道”。
第四行:配置复位方式
reset_config none
- 作用:设置芯片的复位引脚(NRST)如何处理。
none
表示:不使用外部复位信号,也就是你的 ST-Link 没有接目标板的NRST
引脚。
📌 常见选项:
reset_config none
:不使用复位线,只靠软件复位。reset_config srst_only
:只使用系统复位(SRST),即 NRST 引脚。reset_config srst_nogate
:允许复位但不“屏蔽”其他操作。
⚠️ 如果你把 ST-Link 的
NRST
引脚接到 STM32 的复位脚上,可以改成reset_config srst_only
,这样调试器能更可靠地重启芯片。
举个生活化的比喻
想象你要控制一台机器人(STM32芯片):
比喻 | 实际对应 |
---|---|
你用的遥控器 | ST-Link 调试器 |
遥控器用蓝牙连接 | SWD 通信协议 |
机器人型号是“机械臂V1” | STM32F1 系列 |
你写了一份说明书给电脑 | 这个 .cfg 配置文件 |
说明书告诉电脑怎么连遥控器、怎么发指令 | OpenOCD 读取配置,建立连接 |
这个配置文件就是这份“说明书”。
4.4.8 调试及烧录
代码写好后,再把我上面的配置文件内容复制到自己的配置文件里
点击小三角
即可烧录完成
由于笔者暑假放假回家,身边没有单片机,所以实践的内容等到开学后更新