Linux交叉编译开发STM32全过程(Clion + OpenOCD + Stm32CubeMX + GCC)

双系统:ubuntu 22.04

电脑:拯救者Y7000

板子:stm32f103c8t6

一段摸爬滚打的辛酸史,囊括了我在过程中遇见的所有报错及解决方法!

记录自己实现的步骤,过程已经跟新完毕,笔者能力有限所用的方法以及代码考虑的不一定全面,也希望大佬多多补充!

目录

安装stm32cubeIDE

官网下载点击跳转官网

汉化

点击跳转下载汉化包

​编辑

安装stm32cubeMX

下载链接官网

多余的swp文件

clion下载安装

 激活码宝贵

clion汉化

配置环境变量

创建桌面图标

stlink安装

安装openocd

stm32环境搭建

编译工具gcc配置

调试软件OpenOCD

再次检查是否都正确安装

验证连接

报错1:,端口占用的原因

报错2:Warn : UNEXPECTED idcode: 0x2ba01477             Error: expected 1 of 1: 0x1ba01477

Clion嵌入式配置

​编辑​编辑

下载成功,祝大家都能实现!!!


安装stm32cubeIDE

官网下载点击跳转官网

自行下载最新版本

下载目录的终端命令

unzip en.st-stm32cubeide_1.14.0_19471_20231121_1200_amd64.sh.zip

等待

 解压后执行命令

sudo sh ./st-stm32cubeide_1.14.0_19471_20231121_1200_amd64.sh

下滑更多,接受y,回车

成功

汉化

点击跳转下载汉化包

自行选择最新版本

打开安装的stm32cubeIDE 点击“HELP”→“ Install NewSoftware”来添加新插件。

点击Add

点next,等新界面后接受条款,点完成finish,等下载结束就可以了

如果下载过程中会弹出弹框,全选然后点Trust

重启完成汉化,这个插件可以更改主题,自行上网学习,这里不截图了

安装stm32cubeMX

下载链接官网

unzip en.stm32cubemx-lin-v6-10-0.zip 

解压后点击下面这个文件按步骤安装即可

个人问题:安装之后,由于之前我安装过,这次属于重装,由于以前版本没有卸载干净,桌面的图标打不开可以进计算机的/usr/share/applications文件查看,发现安装路径不一致

如果没有安装vim 需要执行sudo apt-get install vim

cd /usr/share/applications/
##根据自己文件名字自行修改
sudo vim st-stm32cubemx-v6-10.desktop

如果你们没有这个desktop文件也可以参考下文创建桌面图标的方式添加

[Desktop Entry]
Name=CubeMX
Comment=STMicroelectronics STM32CubeMX v6-10
GenericName=STM32CubeIDE<F12
Exec=/home/h/Apps/tools/st/stm32cubemx_v6-10/STM32CubeMX
Icon=/home/h/Apps/tools/st/stm32cubemx_v6-10/help/STM32CubeMX.ico
Path=/home/h/Apps/tools/st/stm32cubemx_v6-10
Terminal=false
StartupNotify=true
Type=Application
Categories=Development

多余的swp文件

由于终端 vim和vi 编辑文件不正常退出会产生swp文件, 每次进入编辑这个文件时都弹出一堆提示信息,只读是因为权限不够,解决方法切换到root用户或者在前面加sudo

W10: 警告: 正在修改一个只读文件

需要删除这个缓存文件即可,再次进入就不会报错存在交换文件

sudo rm -r .st-stm32cubemx-v6-10.desktop.swp

clion下载安装

官网链接下载官网

解压完运行解压文件bin目录下的clion.sh

 激活码宝贵

分享一个好用网站,大家尽快使用不知道什么时候失效 点击这个

clion汉化

直接插件里面找,不用去专门下载汉化包,方便很多

配置环境变量

vim ~/.bashrc
#打开文件添加
alias clion=/home/<用户名>/<安装路径>/<安装文件名字版本>/bin/clion.sh
#保存退出终端运行下面代码
source ~/.bashrc

 

之后可以直接通过终端clion就可以打开,也可以通过创建桌面图标

创建桌面图标

cd /usr/share/applications
sudo vim clion.desktop 

需要注意:ExecIcon要根据自己clion的安装路径进行修改,并且CommentVersion要和自己安装的clion的版本号相对应。最后保存退出,就可以在应用程序里看到clion了。

#将下面的代码拷贝进去
[Desktop Entry]
Encoding=UTF-8
Name=CLion
Comment=clion-2023.3.2
Exec=/home/h/Apps/tools/clion-2023.3.2/bin/clion.sh
Icon=/home/h/Apps/tools/clion-2023.3.2/bin/clion.svg
Categories=Application;Development;Java;IDE
Version=2023.3.2
Type=Application
#Terminal=1

如果没有图标出现,可以右键复制或者命令行复制到桌面,我建议右键手动复制法,复制桌面图标右键允许运行

命令行复制如下,要多一步操作修改文件权限

cd /usr/share/applications/
##有的人桌面是英文,我的是中文
sudo cp clion.desktop ~/桌面/
##切换
cd ~/桌面/
##改权限 o+rx 增加其他用户读和执行权限
sudo chmod o+rx clion.desktop

stlink安装

安装openocd

ubuntu的apt可以直接安装

sudo apt install openocd

下载链接点击 —> github

选择合适版本的deb安装

stm32环境搭建

准备:

1、PC:双系统ubuntu22.04

2、开发板:STM32F103C8T6

3、交叉编译工具链:gcc-arm-none-eabi

我下载的是X86_64版本的

4、下载调试软件:OpenOCD

编译工具gcc配置

两个软件分别下载解压

tar -xvif gcc-arm-none-eabi-10.3-2021.10-x86_64-linux.tar.bz2 

tar -xvif openocd-0.12.0.tar.gz 

 配置环境变量:如果遇到权限问题就su转到管理员用户或者chmod改变文件权限

vim ~/.bashrc
##将下面代码添加进文件最后,注意看路径是自己的安装目录
export PATH=$PATH:/home/h/Apps/tools/stm32_tools/gcc-arm-none-eabi-10.3-2021.10/bin

 保存关闭

##使环境变量生效
source ~/.bashrc
##查看安装的版本
arm-none-eabi-gcc -v

如果安装版本对不上,应该是系统自带有安装版本,这时候需要删除原来系统的版本

sudo apt-get remove gcc-arm-none-eabi

 具体详细过程可以看——>这里

#路径需要根据自己安装文件路径更改
exportline="export PATH=/opt/gcc-arm-none-eabi-10.3-2021.10/bin:\$PATH"
#判断配置是否成功
if grep -Fxq "$exportline" ~/.profile; then echo nothing to do ; else echo $exportline >> ~/.profile; fi
#生效文件
source ~/.profile
#查看版本
arm-none-eabi-gcc -v

安装完成也可以通过命令行arm 按Tab看看会不会有下面内容,有的话就安装成功了

arm-none-eabi-gcc --version 
##查看版本信息

调试软件OpenOCD

进入openocd安装的文件夹使用以下命令可以查看调试器及其开关情况

./configure

#配置安装路径
./configure --prefix=/usr/local/openocd

下载相关依赖

sudo apt-get install libhidapi-dev libusb-1.0.0-dev

./configure --enable-cmsis-dap

 

 配置成功,接下来使用make指令编译安装 

make

sudo make install

##路径可以不用改
cd /usr/local/share/openocd/scripts

ls target
ls interface

interface文件夹下存放着下载器接口的文件,target下存放着目标芯片的配置文件(在使用openocd连接开发板时需要用到这两个配置文件)

再次检查是否都正确安装

su
gcc -v
arm-none-eabi-gcc -v
openocd -v

验证连接

  • ST-LINK:
  • openocd -f <接口配置文件> -f <目标芯片配置文件>(绝对路径)
  • telnet localhost 4444
  • >halt 目标芯片挂起,相当于关机
  • >flash write_image erase <烧录文件>(绝对路径)
  • >reset 目标芯片复位
  • >exit 关闭连接
  • openocd -f /usr/local/share/openocd/scripts/interface/stlink-v2.cfg -f /usr/local/share/openocd/scripts/target/stm32f1x.cfg 
    

    报错1:,端口占用的原因

    第一次我的解决方法简单粗暴重启解决,之后我通过网上查询知道以下解决方法:

    端口被占用了,用命令行看看是什么程序占用,下面两个都可以查看

    lsof -i:端口号
    netstat -tunlp|grep 端口号

    知道pid后,再用kill指令杀掉。

    kill -9 进程号

    报错2:Warn : UNEXPECTED idcode: 0x2ba01477
                 Error: expected 1 of 1: 0x1ba01477

     恭喜你买到国产芯片(假的stm32f103c8t6)

    解决方法:vim打开原来的那一行注释掉,改为set _CPUTAPID 0x2ba01477,保存关闭就可以了

    cd /usr/local/share/openocd/scripts/target/
    sudo vim stm32f1x.cfg
    
    # set _CPUTAPID 0x1ba01477
    set _CPUTAPID 0x2ba01477

    WARNING: interface/stlink-v2.cfg is deprecated, please switch to interface/stlink.cfg

    警告:接口/stlink-v2.cfg已弃用,请切换到接口/stlink.cfg

    这里我换成stlink.cfg就没有再报错了

    openocd -f /usr/local/share/openocd/scripts/interface/stlink.cfg -f /usr/local/share/openocd/scripts/target/stm32f1x.cfg 
    

     下图是没有报错的正常情况

    Clion嵌入式配置

    点击新建项目 ——> 嵌入式stm32CubeMx ——> 修正

    出现下列绿色框说明,文件找对了,应用确认后返回新建项目

     构建工具链这也需要将路径选对,不然不出现小锤子

     

    如果和我一样有弹窗点下载,这里面板配置文件跳过,这里生成默认的是STM32F0304Px后续可以在cubeMX里更改,参考下列步骤

    要保持一致才能覆盖原文件,也可以通过Mx先创建再从Clion中打开,配置完成后直接点击右上方的Generate Code,点击是,

    下面弹窗可以选择登录用户也可以直接不管,点继续,因为我点了登录之后一直登录不上,应该和网路有关。

    登录不上无关紧要,这里点继续,就会来到下面这个窗口,打开close 回到clion

     回到Clion后板子文件已经改变了,自动重新配置,并且要求我们选择面板配置文件,面板配置文件中对不同型号的板子有不同的配置文件,择对应型号的复制到项目即可

    我的板子是STM32F103C8T6 ,所以选了第一个,注意选复制到项目并使用,方便查看修改

    报错:– Warning: Did not find file Compiler/-ASM
               — Configuring incomplete, errors occurred!

    点击边上三个点,配置编辑,调试器选择自定义GDB,修改OpenOCD为自己的安装路径,不确定的话可以命令行查询一下,找到自己安装文件的bin目录下的arm-none-eabi-gdb

    whereis arm-none-eabi-gdb
    

    应用后返回界面,打开cfg文件

    添加stlink的烧录器配置代码,如下

    source [find interface/stlink.cfg]
    transport select hla_swd
    source [find target/stm32f1x.cfg]
    adapter speed 10000

    点击小锤子,显示构建成功,连接板子点击运行

    下载成功,最后祝大家都能实现!!!

    作者:hfl~

    物联沃分享整理
    物联沃-IOTWORD物联网 » Linux交叉编译开发STM32全过程(Clion + OpenOCD + Stm32CubeMX + GCC)

    发表评论