在ubuntu下使用Cmake+Clion开发STM32

本文最后更新于 2024年7月14日 下午

建议先安装stm32ubide来获取stlink的支持以及部分文件

Clion的安装以及license获取

license用学校邮箱可以白嫖,一年一千多,免费嫖四年,不嫖就是亏四千

软件可以直接在snap商店下载安装,但是要考虑网络问题,也可以在jetbrans官网下载deb包进行安装

编译工具链的安装

需要下载安装专门的arm编译工具

1
2
sudo apt-get update
sudo apt-get install gcc-arm-none-eabi

验证安装:安装完成后,你可以通过运行以下命令来检查版本,以确保工具链正确安装:

1
arm-none-eabi-gcc --version

安装openOCD

如果嫌麻烦并且没有使用新版本的STM32芯片,安装官方版本就已经足够

1
sudo apt-get install openocd

如果像我一样需要使用到stm32u0或者其他新出的芯片,则需要编译和安装由意法半导体公司提供 的专门针对STM32和STlink的openocd,详见我这篇文章

(该方案获得的opencod与官方版本基本相同,没有见到差异)

stm32版本openOCD编译以及安装方法

验证安装

1
openocd -v

安装stm32cubeMX

在st的官网可以找到下载连接,我是选择用游客方式下载,然后需要用邮箱验证以下就会又回到这个界面进行下载,如果没有跳出下载一般都是网络问题。

STM32CubeMX: Graphical tool - STMicroelectronics - STMicroelectronics

2024-06-10_19-05.png

然后进入下载的目录对安装包解压然后安装

解压

1
unzip en.stm32cubemx-lin-v6-11-1.zip 

然后会产生一个可执行文件

1
./SetupSTM32CubeMX-6.11.1 

接着会跳stm32cubemx的图形化安装界面

然后安装即可,可以就是同意几个用户协议然后选择安装目录

STM32CubeMX 新建工程

新建工程的过程完全一致,只不过最终生成工程的选项要选择为Cmkae

Clion配置

使用clion打开项目

第一次打开项目会让你选择工具连

新建一个工具链

给他命名

选择c编译器和c++编译器

2024-06-10_19-29.png

然后点击下一步

然后对camke进行配置

先把这个Debug的“启动配置文件”取勾,不然这个工程会出现两个编译的目录的,

然后工具链一定要选择刚才配置gcc-arm-none-eabi其他的默认即可

2024-06-10_19-30.png

然后点击build如果能正常编译构建就说明没问题(我这里使用STM32U0编译有些一警告,可能其他型号就是0个报错0个警告)

2024-06-10_19-31.png

调试工具openocd的配置

点击右上角的设置图标/设置

然后搜索嵌入式

然后选择openocd的目录(必定)以及 stm32cubemx的目录(可选)

然后点击右边的测试按钮,如果测试皆通过即可点击应用/确定

Untitled

在项目中添加openocd配置

在这里编辑配置

Untitled

Untitled

Untitled

Untitled

还需要配置USB接口的权限

在辅助这里需要选择openOCD的配置文件,但是这里面的配置文件仅仅是支持了少部分的NUCLEO板卡和DK板卡,其实这里的配置文件都很简单,可以进行简单的修改用来使用,这里真的一言两语说不清楚,具体需要学习OpenOCD的使用

还有一种能获取cfg文件的方法,就是在stm32cubide中新建同样的项目,然后将debug设置为openocd

光做完这些还不够

需要了解cmake的如何管理工程,openocd如何下载和调试程序等等都是大困难。

解决openocd“Error: libusb_open() failed with LIBUSB_ERROR_ACCESS”

报错如下,这个问题产生的根本原因是stlink的权限没有被设置对,说直接原因就是我stm32cubeide没有安装到为,我只安装了stm32cubeide,但是相关的“驱动”没有被包括在内,其中就有slink的vnev配置文件,缺少了这个导致出现了权限问题

1
2
3
4
5
6
7
8
9
/usr/local/bin/openocd -s /usr/local/share/openocd/scripts -f /media/shishengmi/Data/code/STM32/Cmake/STM32U0DK_default/stm32u0.cfg -c "tcl_port disabled" -c "gdb_port disabled" -c "tcl_port disabled" -c "program \"/media/shishengmi/Data/code/STM32/Cmake/STM32U0DK_default/cmake-build-stm32/STM32U0DK_default.elf\"" -c reset -c shutdown
Open On-Chip Debugger 0.12.0-00024-g34afaa939 (2024-06-10-20:34) [https://github.com/STMicroelectronics/OpenOCD]
Licensed under GNU GPL v2
For bug reports, read
http://openocd.org/doc/doxygen/bugs.html
Error: libusb_open() failed with LIBUSB_ERROR_ACCESS
Error: open failed
** OpenOCD init failed **
shutdown command invoked

解决部分芯片没有被支持的问题

原版的openocd已经支持了绝大部分的stm32芯片,但是有部分今年新出的芯片没有被支持
具体过程可以看我这篇文章:在ubuntu24.04下使用CmaKe+Clion开发STM32

将stm32cubdie的openocd覆盖掉原来的opencod

1
sudo cp /home/shishengmi/st/stm32cubeide_1.15.1/plugins/com.st.stm32cube.ide.mcu.externaltools.openocd.linux64_2.3.100.202312181736/tools/bin/openocd /usr/bin/

拷贝stm32cubide下的stm32u0x.cfg到openocd的target目录下,要修改权限保证该文件可被读取

1
2
sudo cp /home/shishengmi/st/stm32cubeide_1.15.1/plugins/com.st.stm32cube.ide.mcu.debug.openocd_2.2.0.202401261111/resources/openocd/st_scripts/target/stm32u0x.cfg /usr/share/openocd/scripts/target/
sudo chmod 644 /usr/share/openocd/scripts/target/stm32u0x.cfg

同理还需要一个tcl文件

1
2
sudo cp /home/shishengmi/st/stm32cubeide_1.15.1/plugins/com.st.stm32cube.ide.mcu.debug.openocd_2.2.0.202401261111/resources/openocd/st_scripts/gdb_helper.tcl /usr/share/openocd/scripts/
sudo chmod 644 /usr/share/openocd/scripts/gdb_helper.tcl

在ubuntu下使用Cmake+Clion开发STM32
http://shishengmi.com/2024/06/01/2024/06/在ubuntu24.04下使用CmaKe+Clion开发STM32/
作者
shishengmi
发布于
2024年6月1日
许可协议