前言 本文记录STM32命令行开发环境在Ubuntu上的部署,用以替代Windows上的RT-Thread-studio。RT-Thread-studio同样是开源 -软件,但目前似乎没有Nixos上的打包。
+前言 本文记录STM32命令行开发环境在Linux上的部署,用以替代Windows上的RT-Thread-studio。RT-Thread-studio同样是开源 +软件,但目前没有Nixos上的打包。
前言 本文记录STM32命令行开发环境在Ubuntu上的部署,用以替代Windows上的RT-Thread-studio。RT-Thread-studio同样是开源 -软件,但目前似乎没有Nixos上的打包。
+前言 本文记录STM32命令行开发环境在Linux上的部署,用以替代Windows上的RT-Thread-studio。RT-Thread-studio同样是开源 +软件,但目前没有Nixos上的打包。
前言 本文记录STM32命令行开发环境在Ubuntu上的部署,用以替代Windows上的RT-Thread-studio。RT-Thread-studio同样是开源 -软件,但目前似乎没有Nixos上的打包。
-前言 本文记录STM32命令行开发环境在Linux上的部署,用以替代Windows上的RT-Thread-studio。RT-Thread-studio同样是开源 +软件,但目前没有Nixos上的打包。
+以ubuntu24.04为例,安装这些包,包括连接工具,工具链和调试器等等。
+以ubuntu24.04为例,首先安装这些包,包括连接工具,工具链和调试器等等。
sudo apt update
sudo apt install -y git python3 scons openocd stlink-tools gcc-arm-none-eabi gdb-multiarch
虽然没有RT-Thread-studio这个包,但是可以用flake.nix很方便的搭建一个开发环境:
+虽然Nixos上没有RT-Thread-studio这个包,但是可以用flake.nix很方便的搭建一个开发环境:
{
description = "STM32 && RT-Thread development environment";
inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
@@ -165,17 +165,31 @@
}
使用Git拉取项目源码:
-git clone https://github.com/RT-Thread/rt-thread.git
-git clone https://github.com/RT-Thread-Studio/sdk-bsp-stm32f407-spark.git
+随后使用Git拉取项目源码:
+git clone https://github.com/RT-Thread-Studio/sdk-bsp-stm32f407-spark.git
+
+ENV工具
+使用Git拉取RT-Thread配套的linux开发环境,并添加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初始化并安装两个必要的包:
+pkgs --update
+pip install kconfiglib
+pip install scons
连接
-使用USB连接开发板和开发PC,并使用lsusb查看是否连接成功:
+使用USB线连接开发板和开发PC,并使用lsusb命令查看是否出现:
lsusb
Bus 001 Device 004: ID 0483:374b STMicroelectronics ST-LINK/V2.1
-如果你和我一样使用 qemu ,需要在libvirt中使用Add_hardware添加usb设备。
-添加成功后可以使用这个命令来检测:
+添加成功后可以使用这个命令来检测是否连接成功:
❯ st-info --probe
Found 1 stlink programmers
version: V2J35S26
@@ -185,16 +199,11 @@
chipid: 0x413
dev-type: STM32F4x5_F4x7
-ENV工具
-使用Git拉取RT-Thread配套的linux开发环境,并添加Shell变量。我使用的是fish,你也可以用其他的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工具
-由于该项目大量使用Python,所以需要PKG包支持。首先我们修改这个文件的交叉工具链部分:
+
+如果你和我一样将Ubuntu安装在QEMU虚拟机中 ,需要在libvirt中使用Add_hardware添加usb设备。
+
+修改交叉工具链
+链接成功后进入项目目录,发现rtconfig.py没有Linux路径,需要我们手动修改交叉工具链部分:
#修改 rtconfig.py
# cross_tool provides the cross compiler
@@ -207,6 +216,7 @@
# Windows 平台
EXEC_PATH = r'C:\Users\XXYYZZ'
else:
+ # 修改这里
# Linux / macOS 平台
EXEC_PATH = '/usr/bin'
@@ -226,11 +236,6 @@
else:
EXEC_PATH = '/usr/bin'
-随后可以使用PKG初始化并安装两个必要的包:
-pkgs --update
-pip install kconfiglib
-pip install scons
-
编译
在完成以上设置之后我们可以开始编译。STM32使用scons编译系统,同样是menuconfig命令:
scons --menuconfig
@@ -250,92 +255,91 @@
除了USB之外我们还可以使用串口连接:
sudo apt install picocom
picocom -b 115200 /dev/ttyACM0
-version
可以使用ctrl + A 然后 ctrl + x退出。
使用Cmake
通过官方文档可以得知除了scons外还可以使用Cmake来编译.
-首先找到编译器的路径,并export:
-❯ which 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_CC=gcc
+首先找到编译器的路径,并export,我这里是Nixos的路径,如果你使用其他发行版注意修改:
+❯ which 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_CC=gcc
随后使用指令scons --target=cmake:
-❯ scons --target=cmake
+❯ scons --target=cmake
-scons: Reading SConscript files ...
-Newlib version:4.5.0
-Update setting files for CMakeLists.txt...
-Done!
-scons: done reading SConscript files.
-scons: Building targets ...
-scons: building associated VariantDir targets: build
-CC build/applications/main.o
-LINK rt-thread.elf
-arm-none-eabi-objcopy -O binary rt-thread.elf rtthread.bin
-arm-none-eabi-size rt-thread.elf
-scons: done building targets.
+scons: Reading SConscript files ...
+Newlib version:4.5.0
+Update setting files for CMakeLists.txt...
+Done!
+scons: done reading SConscript files.
+scons: Building targets ...
+scons: building associated VariantDir targets: build
+CC build/applications/main.o
+LINK rt-thread.elf
+arm-none-eabi-objcopy -O binary rt-thread.elf rtthread.bin
+arm-none-eabi-size rt-thread.elf
+scons: done building targets.
可以看到生成CmakeLists.txt成功,随后开始构建:
-❯ cd ./build
-❯ cmake ..
-CMake Warning (dev) at CMakeLists.txt:43:
- Syntax Warning in cmake code at column 100
+❯ cd ./build
+❯ cmake ..
+CMake Warning (dev) at CMakeLists.txt:43:
+ Syntax Warning in cmake code at column 100
- Argument not separated from preceding token by whitespace.
-This warning is for project developers. Use -Wno-dev to suppress it.
+ Argument not separated from preceding token by whitespace.
+This warning is for project developers. Use -Wno-dev to suppress it.
--- The C compiler identification is GNU 14.3.1
--- The CXX compiler identification is GNU 14.3.1
--- The ASM compiler identification is GNU
--- Found assembler: /nix/store/v9p5md3d4aaqwc9i9hlaxkl7nawd9vrc-gcc-arm-embedded-14.3.rel1/bin/arm-none-eabi-gcc
--- Detecting C compiler ABI info
--- Detecting C compiler ABI info - done
--- Check for working C compiler: /nix/store/v9p5md3d4aaqwc9i9hlaxkl7nawd9vrc-gcc-arm-embedded-14.3.rel1/bin/arm-none-eabi-gcc - skipped
--- Detecting C compile features
--- Detecting C compile features - done
--- Detecting CXX compiler ABI info
--- Detecting CXX compiler ABI info - done
--- Check for working CXX compiler: /nix/store/v9p5md3d4aaqwc9i9hlaxkl7nawd9vrc-gcc-arm-embedded-14.3.rel1/bin/arm-none-eabi-g++ - skipped
--- Detecting CXX compile features
--- Detecting CXX compile features - done
--- Configuring done (0.4s)
--- Generating done (0.0s)
--- Build files have been written to: /home/dich/Git/sdk-bsp-stm32f407-spark/projects/02_basic_ir/build
+-- The C compiler identification is GNU 14.3.1
+-- The CXX compiler identification is GNU 14.3.1
+-- The ASM compiler identification is GNU
+-- Found assembler: /nix/store/v9p5md3d4aaqwc9i9hlaxkl7nawd9vrc-gcc-arm-embedded-14.3.rel1/bin/arm-none-eabi-gcc
+-- Detecting C compiler ABI info
+-- Detecting C compiler ABI info - done
+-- Check for working C compiler: /nix/store/v9p5md3d4aaqwc9i9hlaxkl7nawd9vrc-gcc-arm-embedded-14.3.rel1/bin/arm-none-eabi-gcc - skipped
+-- Detecting C compile features
+-- Detecting C compile features - done
+-- Detecting CXX compiler ABI info
+-- Detecting CXX compiler ABI info - done
+-- Check for working CXX compiler: /nix/store/v9p5md3d4aaqwc9i9hlaxkl7nawd9vrc-gcc-arm-embedded-14.3.rel1/bin/arm-none-eabi-g++ - skipped
+-- Detecting CXX compile features
+-- Detecting CXX compile features - done
+-- Configuring done (0.4s)
+-- Generating done (0.0s)
+-- Build files have been written to: /home/dich/Git/sdk-bsp-stm32f407-spark/projects/02_basic_ir/build
使用make命令编译:
-❯ make
+❯ make
[ 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
[ 3%] Building C object CMakeFiles/rtthread.elf.dir/home/dich/Git/sdk-bsp-stm32f407-spark/rt-thread/components/libc/compilers/common/cstdio.c.obj
-......
+......
[ 97%] Building C object CMakeFiles/rtthread.elf.dir/home/dich/Git/sdk-bsp-stm32f407-spark/libraries/STM32F4xx_HAL/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c.obj
[ 98%] Building C object CMakeFiles/rtthread.elf.dir/home/dich/Git/sdk-bsp-stm32f407-spark/libraries/STM32F4xx_HAL/CMSIS/Device/ST/STM32F4xx/Source/Templates/system_stm32f4xx.c.obj
-[100%] Linking C executable rtthread.elf
- text data bss dec hex filename
- 98516 1468 8400 108384 1a760 rtthread.elf
-[100%] Built target rtthread.elf
+[100%] Linking C executable rtthread.elf
+ text data bss dec hex filename
+ 98516 1468 8400 108384 1a760 rtthread.elf
+[100%] Built target rtthread.elf
使用Renode
如果没有真实的开发版,可以使用Renode来进行仿真模拟:
-# 启动renode
-renode
+# 启动renode
+renode
-# 创建机器
-(monitor) mach create
+# 创建机器
+(monitor) mach create
-# 加载STM32F407平台
-(monitor) machine LoadPlatformDescription @platforms/boards/stm32f4_discovery.repl
+# 加载STM32F407平台
+(monitor) machine LoadPlatformDescription @platforms/boards/stm32f4_discovery.repl
-# 加载你的固件
-(monitor) sysbus LoadELF @/你的路径/rtthread.elf
+# 加载你的固件
+(monitor) sysbus LoadELF @/你的路径/rtthread.elf
-# 打开串口窗口(finsh会显示在这里)
-(monitor) showAnalyzer sysbus.usart1
+# 打开串口窗口(finsh会显示在这里)
+(monitor) showAnalyzer sysbus.usart1
-# 启动仿真
-(monitor) start
+# 启动仿真
+(monitor) start
Renode 常用命令大全
diff --git a/public/pagefind/fragment/en_19effcf.pf_fragment b/public/pagefind/fragment/en_19effcf.pf_fragment
new file mode 100644
index 0000000..44bd33f
Binary files /dev/null and b/public/pagefind/fragment/en_19effcf.pf_fragment differ
diff --git a/public/pagefind/fragment/en_b99cdbd.pf_fragment b/public/pagefind/fragment/en_b99cdbd.pf_fragment
deleted file mode 100644
index 372e7cc..0000000
Binary files a/public/pagefind/fragment/en_b99cdbd.pf_fragment and /dev/null differ
diff --git a/public/pagefind/index/en_2f3681c.pf_index b/public/pagefind/index/en_2f3681c.pf_index
deleted file mode 100644
index f0c50db..0000000
Binary files a/public/pagefind/index/en_2f3681c.pf_index and /dev/null differ
diff --git a/public/pagefind/index/en_38bac08.pf_index b/public/pagefind/index/en_38bac08.pf_index
new file mode 100644
index 0000000..57a72b0
Binary files /dev/null and b/public/pagefind/index/en_38bac08.pf_index differ
diff --git a/public/pagefind/index/en_49b7d39.pf_index b/public/pagefind/index/en_49b7d39.pf_index
new file mode 100644
index 0000000..977d26c
Binary files /dev/null and b/public/pagefind/index/en_49b7d39.pf_index differ
diff --git a/public/pagefind/index/en_54e8cab.pf_index b/public/pagefind/index/en_54e8cab.pf_index
new file mode 100644
index 0000000..d9ed600
Binary files /dev/null and b/public/pagefind/index/en_54e8cab.pf_index differ
diff --git a/public/pagefind/index/en_6ab6e6e.pf_index b/public/pagefind/index/en_6ab6e6e.pf_index
deleted file mode 100644
index a602f9d..0000000
Binary files a/public/pagefind/index/en_6ab6e6e.pf_index and /dev/null differ
diff --git a/public/pagefind/index/en_8d484dd.pf_index b/public/pagefind/index/en_8d484dd.pf_index
new file mode 100644
index 0000000..8a1b5dd
Binary files /dev/null and b/public/pagefind/index/en_8d484dd.pf_index differ
diff --git a/public/pagefind/index/en_9a9ddf5.pf_index b/public/pagefind/index/en_9a9ddf5.pf_index
new file mode 100644
index 0000000..324081f
Binary files /dev/null and b/public/pagefind/index/en_9a9ddf5.pf_index differ
diff --git a/public/pagefind/index/en_9c9f9d9.pf_index b/public/pagefind/index/en_9c9f9d9.pf_index
deleted file mode 100644
index b92d304..0000000
Binary files a/public/pagefind/index/en_9c9f9d9.pf_index and /dev/null differ
diff --git a/public/pagefind/index/en_b8e3dd1.pf_index b/public/pagefind/index/en_b8e3dd1.pf_index
deleted file mode 100644
index c12785b..0000000
Binary files a/public/pagefind/index/en_b8e3dd1.pf_index and /dev/null differ
diff --git a/public/pagefind/index/en_cd22948.pf_index b/public/pagefind/index/en_cd22948.pf_index
deleted file mode 100644
index f07b27f..0000000
Binary files a/public/pagefind/index/en_cd22948.pf_index and /dev/null differ
diff --git a/public/pagefind/pagefind-entry.json b/public/pagefind/pagefind-entry.json
index 41bc995..d1dec23 100644
--- a/public/pagefind/pagefind-entry.json
+++ b/public/pagefind/pagefind-entry.json
@@ -1 +1 @@
-{"version":"1.3.0","languages":{"en":{"hash":"en_15f5696b4f","wasm":"en","page_count":78}}}
\ No newline at end of file
+{"version":"1.3.0","languages":{"en":{"hash":"en_dd877f82ec","wasm":"en","page_count":78}}}
\ No newline at end of file
diff --git a/public/pagefind/pagefind.en_15f5696b4f.pf_meta b/public/pagefind/pagefind.en_15f5696b4f.pf_meta
deleted file mode 100644
index df0ee69..0000000
Binary files a/public/pagefind/pagefind.en_15f5696b4f.pf_meta and /dev/null differ
diff --git a/public/pagefind/pagefind.en_dd877f82ec.pf_meta b/public/pagefind/pagefind.en_dd877f82ec.pf_meta
new file mode 100644
index 0000000..e04a6ba
Binary files /dev/null and b/public/pagefind/pagefind.en_dd877f82ec.pf_meta differ