update:stm32

This commit is contained in:
dichgrem
2025-11-20 11:57:24 +08:00
parent 171d867f21
commit 08cebea624

View File

@@ -6,15 +6,15 @@ date = 2025-07-20
tags = ["Linux"] tags = ["Linux"]
+++ +++
前言 本文记录STM32命令行开发环境在Ubuntu上的部署用以替代Windows上的RT-Thread-studio。RT-Thread-studio同样是开源 前言 本文记录STM32命令行开发环境在Linux上的部署用以替代Windows上的RT-Thread-studio。RT-Thread-studio同样是开源
软件,但目前似乎没有Nixos上的打包。 软件但目前没有Nixos上的打包。
<!-- more --> <!-- more -->
## 环境 ## 依赖包
- **Ubuntu** - **Ubuntu**
以ubuntu24.04为例,安装这些包,包括连接工具,工具链和调试器等等。 以ubuntu24.04为例,首先安装这些包,包括连接工具,工具链和调试器等等。
```shell ```shell
sudo apt update sudo apt update
sudo apt install -y git python3 scons openocd stlink-tools gcc-arm-none-eabi gdb-multiarch sudo apt install -y git python3 scons openocd stlink-tools gcc-arm-none-eabi gdb-multiarch
@@ -22,7 +22,7 @@ sudo apt install -y git python3 scons openocd stlink-tools gcc-arm-none-eabi gdb
- **Nixos** - **Nixos**
虽然没有RT-Thread-studio这个包但是可以用flake.nix很方便的搭建一个开发环境 虽然Nixos上没有RT-Thread-studio这个包但是可以用flake.nix很方便的搭建一个开发环境
```nix ```nix
{ {
@@ -56,24 +56,44 @@ sudo apt install -y git python3 scons openocd stlink-tools gcc-arm-none-eabi gdb
## 源码 ## 源码
使用Git拉取项目源码 随后使用Git拉取项目源码
```shell ```shell
git clone https://github.com/RT-Thread/rt-thread.git
git clone https://github.com/RT-Thread-Studio/sdk-bsp-stm32f407-spark.git git clone https://github.com/RT-Thread-Studio/sdk-bsp-stm32f407-spark.git
``` ```
## ENV工具
使用Git拉取RT-Thread配套的linux开发环境并添加Shell变量。
```shell
# 克隆仓库
git clone https://github.com/RT-Thread/env.git ~/env
# 将 ~/env 添加到 PATH
export PATH="$PATH:$HOME/env"
# 显示 PATH
echo "$PATH"
# 查看 pkgs 命令是否存在
type pkgs
```
随后可以使用PKG初始化并安装两个必要的包
```shell
pkgs --update
pip install kconfiglib
pip install scons
```
## 连接 ## 连接
使用USB连接开发板和开发PC并使用lsusb查看是否连接成功 使用USB线连接开发板和开发PC并使用lsusb命令查看是否出现
```shell ```shell
lsusb lsusb
Bus 001 Device 004: ID 0483:374b STMicroelectronics ST-LINK/V2.1 Bus 001 Device 004: ID 0483:374b STMicroelectronics ST-LINK/V2.1
``` ```
如果你和我一样使用 qemu 需要在libvirt中使用Add_hardware添加usb设备。 添加成功后可以使用这个命令来检测是否连接成功:
添加成功后可以使用这个命令来检测:
```shell ```shell
st-info --probe st-info --probe
@@ -86,20 +106,11 @@ Found 1 stlink programmers
dev-type: STM32F4x5_F4x7 dev-type: STM32F4x5_F4x7
``` ```
## ENV工具 > 如果你和我一样将Ubuntu安装在QEMU虚拟机中 需要在libvirt中使用Add_hardware添加usb设备。
使用Git拉取RT-Thread配套的linux开发环境并添加Shell变量。我使用的是fish你也可以用其他的Shell命令有所不同。 ## 修改交叉工具链
```shell
git clone https://github.com/RT-Thread/env.git ~/env
set -x PATH $PATH ~/env
fish_add_path ~/env
echo $PATH
type pkgs
```
## PKG工具 链接成功后进入项目目录,发现``rtconfig.py``没有Linux路径需要我们手动修改交叉工具链部分
由于该项目大量使用Python所以需要PKG包支持。首先我们修改这个文件的交叉工具链部分
```python ```python
#修改 rtconfig.py #修改 rtconfig.py
@@ -114,6 +125,7 @@ if CROSS_TOOL == 'gcc':
# Windows 平台 # Windows 平台
EXEC_PATH = r'C:\Users\XXYYZZ' EXEC_PATH = r'C:\Users\XXYYZZ'
else: else:
# 修改这里
# Linux / macOS 平台 # Linux / macOS 平台
EXEC_PATH = '/usr/bin' EXEC_PATH = '/usr/bin'
@@ -133,13 +145,7 @@ elif CROSS_TOOL == 'llvm-arm':
else: else:
EXEC_PATH = '/usr/bin' EXEC_PATH = '/usr/bin'
``` ```
随后可以使用PKG初始化并安装两个必要的包
```shell
pkgs --update
pip install kconfiglib
pip install scons
```
## 编译 ## 编译
在完成以上设置之后我们可以开始编译。STM32使用scons编译系统同样是menuconfig命令 在完成以上设置之后我们可以开始编译。STM32使用scons编译系统同样是menuconfig命令
@@ -171,7 +177,6 @@ st-flash write rtthread.bin 0x08000000
```shell ```shell
sudo apt install picocom sudo apt install picocom
picocom -b 115200 /dev/ttyACM0 picocom -b 115200 /dev/ttyACM0
version
``` ```
可以使用``ctrl + A 然后 ctrl + x``退出。 可以使用``ctrl + A 然后 ctrl + x``退出。
@@ -179,9 +184,9 @@ version
通过官方文档可以得知除了scons外还可以使用Cmake来编译. 通过官方文档可以得知除了scons外还可以使用Cmake来编译.
首先找到编译器的路径并export 首先找到编译器的路径并export我这里是Nixos的路径如果你使用其他发行版注意修改
```shell ```bash
which arm-none-eabi-gcc which arm-none-eabi-gcc
/nix/store/v9p5md3d4aaqwc9i9hlaxkl7nawd9vrc-gcc-arm-embedded-14.3.rel1/bin/arm-none-eabi-gcc /nix/store/v9p5md3d4aaqwc9i9hlaxkl7nawd9vrc-gcc-arm-embedded-14.3.rel1/bin/arm-none-eabi-gcc
export RTT_EXEC_PATH=/nix/store/v9p5md3d4aaqwc9i9hlaxkl7nawd9vrc-gcc-arm-embedded-14.3.rel1/bin export RTT_EXEC_PATH=/nix/store/v9p5md3d4aaqwc9i9hlaxkl7nawd9vrc-gcc-arm-embedded-14.3.rel1/bin
@@ -189,7 +194,7 @@ export RTT_CC=gcc
``` ```
随后使用指令``scons --target=cmake`` 随后使用指令``scons --target=cmake``
```shell ```bash
scons --target=cmake scons --target=cmake
scons: Reading SConscript files ... scons: Reading SConscript files ...
@@ -207,7 +212,7 @@ scons: done building targets.
``` ```
可以看到生成CmakeLists.txt成功随后开始构建 可以看到生成CmakeLists.txt成功随后开始构建
```shell ```bash
cd ./build cd ./build
cmake .. cmake ..
CMake Warning (dev) at CMakeLists.txt:43: CMake Warning (dev) at CMakeLists.txt:43:
@@ -236,7 +241,7 @@ This warning is for project developers. Use -Wno-dev to suppress it.
``` ```
使用``make``命令编译: 使用``make``命令编译:
```shell ```bash
make make
[ 1%] Building C object CMakeFiles/rtthread.elf.dir/applications/main.c.obj [ 1%] Building C object CMakeFiles/rtthread.elf.dir/applications/main.c.obj
[ 2%] Building C object CMakeFiles/rtthread.elf.dir/home/dich/Git/sdk-bsp-stm32f407-spark/rt-thread/components/libc/compilers/common/cctype.c.obj [ 2%] Building C object CMakeFiles/rtthread.elf.dir/home/dich/Git/sdk-bsp-stm32f407-spark/rt-thread/components/libc/compilers/common/cctype.c.obj
@@ -254,7 +259,7 @@ This warning is for project developers. Use -Wno-dev to suppress it.
如果没有真实的开发版可以使用Renode来进行仿真模拟 如果没有真实的开发版可以使用Renode来进行仿真模拟
```shell ```bash
# 启动renode # 启动renode
renode renode