前期准备
软件准备
- Clion 2022.3
- STM32CubeMX
- MinGW
- OpenOCD
- arm-none-eabi-gcc
硬件环境
- windows系统
- 野火挑战者V1开发板 STM32F429IGT6
- 调试工具:STlink V2,DapLink,Jlink(有点不合适,因为要阉割后才能使用,后面说明)
环境准备
-
MinGW
Clion需要使用MinGW环境来配置工具链。记住这句话
MinGW(Minimalist GNU for Windows),又称mingw32,是将GCC编译器和GNU Binutils移植到Win32平台下的产物,包括一系列头文件(Win32API)、库和可执行文件。
另有可用于产生32位及64位Windows可执行文件的MinGW-w64项目,是从原本MinGW产生的分支。如今已经独立发展
要知道,GCC 官网提供的 GCC 编译器是无法直接安装到 Windows 平台上的,如果我们想在 Windows 平台使用 GCC 编译器,可以安装 GCC 的移植版本。
目前适用于 Windows 平台、受欢迎的 GCC 移植版主要有 2 种,分别为 MinGW 和 Cygwin。其中,MinGW 侧重于服务 Windows 用户可以使用 GCC 编译环境,直接生成可运行 Windows 平台上的可执行程序,相比后者体积更小,使用更方便;而 Cygwin 则可以提供一个完整的 Linux 环境,借助它不仅可以在 Windows 平台上使用 GCC 编译器,理论上可以运行 Linux 平台上所有的程序。
有的同学可能会问,x86架构编译的程序不是不能给ARM架构的stm32使用吗,的确如此,这里我们主要是使用MinGW的make功能,如果找不到mingw32-make也就是,复制一份重命名为make.exe
很多其他的的帖子上需要安装MinGW,其实Clion安装的时候自带MinGW,自带的MinGW添加到环境变量中也没有问题
我只是简单的验证了一下,但是没有用于实际开发,还是随大流安装MinGW w64
下载链接:MinGW-w64 - for 32 and 64 bit Windows - Browse /mingw-w64 at SourceForge.net
-
OpenOCD 开源的下载调试工具
-
arm-none-eabi-gcc 交叉编译环境
在x86架构(即PC)编译的程序不能在ARM架构的stm32上运行,必须使用ARM的交叉编译工具链
具体的交叉编译环境的区别可以看这个帖子 ,说的很清楚ARM交叉编译器GNUEABI、NONE-EABI、ARM-EABI、GNUEABIHF等的区别_Tomhex的博客-CSDN博客因为是进行STM32的开发 裸机(bare metal)开发,所以选择这个版本
下载链接 :Arm GNU Toolchain Downloads – Arm Developer
-
CMake(自己决定,不用下载安装)
有些帖子上安装了CMake,是想用Cmake,但是CLion自带很多的构建工具
Cmake文件夹中的Cmake,MinGW文件夹中的mingw32-make,ninja文件夹中的ninja,所以不用下载,用Clion中自带的很多就可以,跳过
如果想要了解清楚,可以看这篇文章 GCC、CMake、CMakelist、Make、Makefile、Ninja啥关系?一图讲透!
-
Clion的安装和河蟹
会搜索 会淘宝就行,那是一片广阔的世界,你值得拥有
-
STM32CubeMX
默认安装即可
-
环境变量的添加
以上 以上 OpenOCD/MinGW/Arm-none-eabi-gcc这三个需要添加进环境变量中的,我集中放在一个文件夹中,放在C盘中,路径中千万不要有中文或者空格存在,不然后面出问题排查很麻烦
随后进行环境变量的添加,在windows搜索框中输入环境,就会出现编辑系统环境变量,按下图进行添加
验证一下,在CMD或者一些终端上验证结果如下
其中关于gcc -v,有些帖子也是这样验证:mingw32-make,其实一样的,都是验证mingw的bin是否成功添加进环境变量
CLion配置
需要在设置中进行如下的设置
工具链配置
如果你平时还会使用 CLion 开发一般的 C/C++ 项目,可以创建两个工具链配置,一个作为普通 C/C++ 开发工具使用,另一个配置 arm-none-eabi-gcc 用于 STM32 的开发。
因为我只进行STM32的开发,所以只配置了一个工具链,先放出来我自己的配置
下面针对几个关键的配置选择进行说明
-
名称
区别于C的开发即可,我只保留了一个STM32的
-
工具集
我用CLion自带的MinGW ,而没有用前面自行安装的,其实是一样的,你可以切换看下,Clion自带的MinGW w64版本高些,所以,你懂的,丰俭由人。
-
CMake
直接默认的,因为前面说了有些会额外安装CMake,但是CLion已经自带了,没必要,默认即可
-
构建工具
可以默认使用CLion自带的Ninja.exe或者mingw32-make.exe,还可以选择自己安装的mingw中的mingw32-make.exe,我选择了后面的 自己安装的mingw中的mingw32-make,但是选择ninja.exe,在有很多文件的条件下,编译速度会快很多。
-
C/C++ 编译器
这个必须要选择交叉编译环境中的gcc /g++
-
调试器
选择编译器相同文件路径下的gdb工具,有版本限制,注意一下。关于这个Debugger,有些人选择Clion默认的bundled版本才可以开发,但是有人反馈使用的默认的不能进Debugger
Cmake配置
首先上方的那个勾选上,工具链选择你上一步刚命名的,生成器 选择 使用默认值
嵌入式开发
选择openocd/STM32CubeMX,后面的测试按键可以检测。跳过
STM32CubeMX配置
-
ToolChain/IDE
STM32CubeIDE 或者 SW4STM32 均可用于 CLion
但是在STM32CubeMX更新后,具体哪个版本未知,我使用的V6.9.1,不再支持设置为SW4STM32了,设置为STM32CubeIDE,Clion也可以识别
-
Location
注意 注意 注意CLion新建STM32CubeMX工程的路径要和STM32CubeMX中最后的ToolChain Folder Location一致,否则Clion可能无法识别。
Clion开发编译调试下载
本来想用野火的开发板演示下,但是不太想动,还是重新建一个项目吧 ,用反客的Fanke429BIT6开发板演示下
新建项目
,记住这个路径,点击创建后等待STM32CUbeMX启动
弹出一弹窗,这个是配置编译下载器相关的,先跳过,后面再说
点击打开,跳转到CubeMX中,默认会出现STM32F030的,需要根据自己的板子MCU重新选择
其他的常规配置前面有说一些,我们来看下最重要的两个
这个ToolChain Folder Location必须和前面创建CLion工程的路径一致,必须,必须,必须
Toolchain IDE 现在只能选择STM32CubeIDE了。没得选了。然后Generate Code,完成关闭CubeMX。
然后在CLion中等待一下或者双击面板,会出现面板配置文件,还是跳过,还没到下载和编译阶段,不选择的原因后面会详细说。现在还是选择跳过
现在说下这个,有些帖子说在CubeMX生成文件后,需要在这里操作下
其实,可以不用这么操作,我们前面在CLion设置的CMake上有勾选一个,就是起到自动重新加载Cmake项目的作用。
编译/下载
CubeMX生成文件后,Clion自动加载,此时跳过点灯代码编写,随便写一个HAL_GPIO_WritePin驱动LED,现在进行编译/下载操作
添加/编写配置
选择OpenOCD下载并运行
修改如下
目标和可执行文件这个默认即可, 重点是面板配置文件,也就是之前出现好几次的弹窗,选择跳过的那个,现在来解释下为什么先前要跳过去。
调试单片机程序需要调试器,在 Keil 或者 IAR 等 IDE 中可以通过图形界面选择需要的调试器,但 CLion 本身并没有调试 STM32 的能力,而是要通过 OpenOCD。OpenOCD 则通过调试配置文件确定使用的调试器和目标芯片类型。打开 OpenOCD 的软件目录 openocd-0.10.0\share\openocd\scripts (不同版本可能有所差异),可以看到下面三个文件夹:board, interface, target
- board 文件夹存储了各家厂商官方开发板的配置文件,如果你使用的是 ST 官方出品的开发板,就可以直接使用其中的调试文件,例如 _NUCLEO_-_F103RB_(如下图) ,那么 board 文件夹中的 st_nucleo_f103rb.cfg 就是你应该选择的,其他官方开发板同理。
- interface 文件夹存储了各种调试器的配置文件,包括 cmsis-dap、stlink-v2 等。
- target 文件夹则存储了各种芯片的配置文件,例如 stm32f1x.cfg 就对应着 STM32F1 系列。
正点原子、野火等国内企业出品的开发板不属于官方开发板,自然在 board 文件夹中不会有他们的配置文件,因此我们需要根据自己使用的调试器和芯片,写自己的配置文件。
新建一个cfg格式的文件,位置可以设置在项目工程文件夹里面也可以放在openocd->share->openocd->scripts->board中,就看自己怎么方便了,包括后续的管理,具体的文件内容如下:
在配置文件中不要加reset_config srst_only这一句,会导致下载失败,这一句是指示系统重启的,删除不影响下载。
Fanke429BIT6_Link.cfg
# CMSIS-DAP 和 DAPLink 其实不是同一个东西,但都使用同一个调试器配置
#打开interface目录下的cmsis-dap.cfg文件,可以知道就是下面的注释掉的第一行
#adapter driver cmsis-dap
source [find interface/cmsis-dap.cfg]
# 使用 swd 调试接口
transport select swd
# stlink将下面两行取消注释
#source [find interface/stlink.cfg]
#transport select hla_swd
# 目标芯片设定为 STM32F4 系列 在target目录下
source [find target/stm32f4x.cfg]
# download speed = 10MHz
adapter speed 10000
# 不使用复位接口
#reset_config srst_only
reset_config none
这个只是展示cfg文件的作用是什么,我们需要告诉CLion芯片名称和下载器的型号,所以我们要先写好一个config文件,以后直接在CLion引用即可。这样就不用每次新建工程都新添加一次文件了
现场演示下如何编写cfg文件,我用的Daplink ,stlink也是一样的
编写面板配置文件完成,开始修改运行/调试配置 ,将刚才的面板配置文件导入即可
编译/下载
编译![](https://img-blog.csdnimg.cn/7c7b1388d44d4ec2b2132ebc0a04b2a1.png)
编译结果如下:
下载
点击运行即可进行下载操作
调试 Debugger
点击右上角的虫子按钮即可开始调试。与 STM32CubeIDE 开始调试后自动在 main 函数停止不同,CLion 中调试要手动添加断点才会停下来 因此点击Debug之后会暂停在断点处,需要重置后这些才可以操作单步调试。
查看寄存器
直接查看 STM32 单片机各寄存器的值,方便在寄存器层面进行调试
需要下载到对应芯片的系统视图描述(SVD)文件,导入后才能正常显示。打开CubeMX->Help->Docs and Resources中找到System View Description,如下图。选择其中一个文件保存到一个适当的文件夹内。之后在Clion添加.svd文件,找到自己保存的文件地址添加进去即可。