当前位置: 首页 > article >正文

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博客


http://www.kler.cn/a/516156.html

相关文章:

  • FPGA中场战事
  • springboot 配置redis
  • 怎样使用树莓派自己搭建一套ADS-B信号接收系统
  • 软件安全性测试报告如何编写?
  • 高并发压力测试
  • C++17 新特性深入解析:constexpr 扩展、if constexpr 和 constexpr lambda
  • 数量4-经济、最值、周期
  • 安卓14自由窗口圆角处理之绘制圆角轮廓线
  • 天天AI-20250121:全面解读 AI 实践课程:动手学大模型(含PDF课件)
  • 【数据结构】顺序队列与链式队列
  • MySQL 主从复制(单组传统复制,GTID复制。双主复制)
  • qml ColorDialog详解
  • 【Unity】 HTFramework框架(五十九)快速开发编辑器工具(Assembly Viewer + ILSpy)
  • 没有屋檐的房子-023粪堆旁边的舞蹈
  • 国内股票年化收益回归分析(上)
  • 深度学习|表示学习|卷积神经网络|参数共享是什么?|07
  • 【MySQL】 库的操作
  • 【优选算法】7----三数之和
  • 树的宽度优先遍历(c++)
  • 头歌实训作业 算法设计与分析-贪心算法(第2关:最优装载问题)
  • 性能测试监控与诊断
  • ARM64平台Flutter环境搭建
  • EF Core 乐观、悲观并发控制
  • spring-springboot -springcloud
  • Sophon边缘盒数据校验及量化
  • Java拓展学习——Process类的学习和使用