Linux系统下速通stm32的clion开发环境配置
陆陆续续搞这个已经很久了。
因为自己新电脑是linux系统无法使用keil,一开始想使用vscode里的eide但感觉不太好用;后面想直接使用cudeide但又不想妥协,想趁着这个机会把linux上的其他单片机开发配置也搞明白;而且非常想搞懂cmake编译的一些原理,顺便可以看看bootloader的内容;并且厌倦了再用库函数的方式写hal库的代码,想更加专注于代码逻辑;
综上所述,其实是在强迫自己重新学一遍cortex-m3/m4这类单片机的基本原理和他们不同的烧录方式,并把一些基础概念过一遍,比如说mpu,mmu,mcu,soc的含义之类。
这篇文章大概是这个追根究底系列里的第一篇内容。
clion的下载
去官网下载即可,或者用命令行下载。
yay -S clion
openocd的下载
这是用来烧录的
yay -S openocd
STM32cubemx的下载
当然是去官网下载,但是yay库其实真的很包罗万象,也可以用命令行下载
yay -S stm32cubemx
GCC编译器与工具链的下载
绝对不可以使用自带的x86 gcc工具链编译stm32工程,交叉编译时也需要再设置一下CMakeLists.txt,否则会出现如下问题:
cc: 警告:已弃用‘-mcpu=’;请改用‘]8;;https://gcc.gnu.org/onlinedocs/gcc-14.2.0/gcc/x86-Options.html#index-mtune-17-mtune=]8;;’或‘]8;;https://gcc.gnu.org/onlinedocs/gcc-14.2.0/gcc/x86-Options.html#index-march-16-march=]8;;’
cc: 错误:unrecognized command-line option ‘-mthumb’
cc: 错误:unrecognized command-line option ‘-mthumb-interwork’
make[2]: *** [CMakeFiles/stm32project1.elf.dir/build.make:79:CMakeFiles/stm32project1.elf.dir/Core/Src/can.c.o] 错误 1
make[1]: *** [CMakeFiles/Makefile2:87:CMakeFiles/stm32project1.elf.dir/all] 错误 2
make: ***
如果使用x86的gcc编译器完成交叉编译,会发现即使所有都设置好了,也会出现上述报错。
所以,需要下载arm-none-eabi-bin或者到官方网站下载工具链,版本是14.2.1。
sudo pacman -S gcc-arm-none-eabi-bin
sudo vim /etc/profile
在这个文件的最后添加环境变量,确保系统可以找到新下载的工具链。/usr/arm-none-eabi/bin是安装的工具链的目录,可以改成自己安装的目录。
export PATH=$PATH:/usr/arm-none-eabi/bin
之后验证一下,确保自己已经安装上了
如果出现arch什么的,说明这并不是arm的工具链,需要重新下载。
创建工程
打开clion,新建一个项目,这里可以直接新建关于cubemx的新项目
这个项目的mcu是固定的,改不了,所以我们需要在弹出的窗口内新建一个cubemx项目,并在配置完之后覆盖保存project,需要注意这里面project名字要和一开始一致。我这里新建了一个f407vet6的项目。
之后就是配置并生成代码了,这里要按照cubeide的方式生成代码。
我自己更喜欢设置分别生成代码,而不是把代码堆在同一个文件里 。
编译配置
打开file-setting-toolchain,新建一个设置,这是我的相关设置:
这个构建工具可以选择make或ninja(如果什么都没有设置就会自动选择ninja),最终都是使用cmake完成整个构建过程。
其实使用ninja也可以顺利生成工程文件和build.ninja,但是cubemx会自动生成一个makefile文件。我认为使用unix makefile的方式调试和构建会更好。
点开下面cmake选项卡,设置相同的工具链和生成器。
理论来说,到这步直接运行编译,应该是没有什么问题的。cubemx自己生成的cmakelist.txt和makefile也一切正常,但如果还会出现
cc: 警告:已弃用‘-mcpu=’;请改用‘]8;;https://gcc.gnu.org/onlinedocs/gcc-14.2.0/gcc/x86-Options.html#index-mtune-17-mtune=]8;;’或‘]8;;https://gcc.gnu.org/onlinedocs/gcc-14.2.0/gcc/x86-Options.html#index-march-16-march=]8;;’
cc: 错误:unrecognized command-line option ‘-mthumb’
cc: 错误:unrecognized command-line option ‘-mthumb-interwork’
make[2]: *** [CMakeFiles/stm32project1.elf.dir/build.make:79:CMakeFiles/stm32project1.elf.dir/Core/Src/can.c.o] 错误 1
make[1]: *** [CMakeFiles/Makefile2:87:CMakeFiles/stm32project1.elf.dir/all] 错误 2
make: ***
这个问题,说明交叉编译失败,默认使用的还是x86的gcc编译器。可以通过改cmakelist.txt强行让他使用arm工具链。
set(CMAKE_SYSTEM_NAME Generic)
set(CMAKE_SYSTEM_VERSION 1)
set(CMAKE_SYSTEM_PROCESSOR arm)
cmake_minimum_required(VERSION 3.29)
# specify cross-compilers and tools
set(CMAKE_C_COMPILER arm-none-eabi-gcc)
set(CMAKE_CXX_COMPILER arm-none-eabi-g++)
set(CMAKE_ASM_COMPILER arm-none-eabi-gcc)
set(CMAKE_AR arm-none-eabi-ar)
set(CMAKE_OBJCOPY arm-none-eabi-objcopy)
set(CMAKE_OBJDUMP arm-none-eabi-objdump)
set(SIZE arm-none-eabi-size)
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
set(CMAKE_C_FLAGS "-mcpu=cortex-m4 -mthumb")
# project settings
project(stm32project1 C CXX ASM)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_C_STANDARD 11)
注意不要运行makefile,而是运行OCD project,需要改一下调试配置如下图,让他生成elf文件,先编译,再运行,最后调试。
可以改面板配置文件,我这里的配置文件是示例的配置文件。
更新cubemx工程,更新cmake(这俩功能在工具-cmake选项里)
重新编译,结果如下,hex文件可以用于烧录:
这几天一直使用远程控制电脑的方式,完成编译配置并写出这篇文章,体验感很好。
远程控制电脑的配置文章在这里:
如何在linux系统上完成定时开机和更新github端口的任务-CSDN博客