From 53de825c4c4d8325c02341177f62ab84897eb5ee Mon Sep 17 00:00:00 2001
From: guowenxue <guowenxue@gmail.com>
Date: Sat, 25 Jul 2026 22:09:43 +0800
Subject: [PATCH] update vscode task.json and add stm32flash tools
---
ex1.buzzer-music/.vscode/tasks.json | 43 ++-----
/dev/null | 0
ex1.servo-sg90/.vscode/tasks.json | 43 ++-----
ex1.ws2812b/.vscode/tasks.json | 43 ++-----
stm32flash/bin/arm-none-eabi-objcopy.exe | 0
stm32flash/stm32flash.bat | 147 ++++++++++++++++++++++++
ex1.auto-light/.vscode/tasks.json | 43 ++-----
stm32flash/bin/readme.txt | 5
stm32flash/bin/stm32flash.exe | 0
stm32flash/config.ini | 4
10 files changed, 208 insertions(+), 120 deletions(-)
diff --git a/ex1.auto-light/.vscode/stm32flash.bat b/ex1.auto-light/.vscode/stm32flash.bat
deleted file mode 100644
index 0bcacc9..0000000
--- a/ex1.auto-light/.vscode/stm32flash.bat
+++ /dev/null
@@ -1,21 +0,0 @@
-@echo off
-setlocal
-
-set OBJCOPY=%GCC_BIN%\arm-none-eabi-objcopy.exe
-set PORT=%1
-
-echo ==^ Converting ELF to BIN...
-%OBJCOPY% -O binary %ELF% %BIN%
-if errorlevel 1 (
- echo objcopy failed!
- exit b 1
-)
-
-echo ==^ Flashing via %PORT% ...
-%FLASH_EXE% -w %BIN% -v -g 0x0 -b 115200 %PORT%
-if errorlevel 1 (
- echo stm32flash failed!
- exit b 1
-)
-
-echo ==^ Done.
\ No newline at end of file
diff --git a/ex1.auto-light/.vscode/tasks.json b/ex1.auto-light/.vscode/tasks.json
index c8d0ec6..3079dd6 100644
--- a/ex1.auto-light/.vscode/tasks.json
+++ b/ex1.auto-light/.vscode/tasks.json
@@ -2,22 +2,16 @@
"version": "2.0.0",
"tasks": [
{
- "label": "STM32: Flash via ST-Link(SWD)",
+ "label": "STM32: Flash via ST-Link (SWD)",
"type": "shell",
- "command": "D:\\Program Files\\ST\\STM32CubeProgrammer\\bin\\STM32_Programmer_CLI.exe",
+ "command": "cube",
"args": [
- "-c port=SWD",
- "-e all",
- "-w",
- "${workspaceFolder}\\build\\Release\\ISKBoard.elf",
- "0x08000000",
- "-v",
+ "programmer",
+ "-c", "port=SWD", "freq=4000", "reset=HWrst",
+ "-w", "${workspaceFolder}\\build\\Release\\ISKBoard.elf",
"-rst"
],
- "group": {
- "kind": "build",
- "isDefault": false
- },
+ "group": "build",
"problemMatcher": [],
"presentation": {
"reveal": "always",
@@ -26,26 +20,15 @@
}
},
{
- "label": "STM32: Flash via stm32flash(UART)",
+ "label": "STM32: Flash via Serial (UART)",
"type": "shell",
- "command": "${workspaceFolder}/.vscode/stm32flash.bat",
+ "command": "cube",
"args": [
- "${input:comPort}"
+ "programmer",
+ "--connect", "port=${input:comPort}",
+ "-w", "${workspaceFolder}\\build\\Release\\ISKBoard.elf"
],
- "options": {
- "env": {
- "PATH": "${env:PATH}",
- "SystemRoot": "${env:SystemRoot}",
- "GCC_BIN": "${env:LOCALAPPDATA}\\stm32cube\\bundles\\gnu-tools-for-stm32\\14.3.1+st.2\\bin",
- "ELF": "${workspaceFolder}\\build\\Release\\ISKBoard.elf",
- "BIN": "${workspaceFolder}\\build\\Release\\ISKBoard.bin",
- "FLASH_EXE": "${workspaceFolder}\\.vscode\\stm32flash.exe"
- }
- },
- "group": {
- "kind": "build",
- "isDefault": false
- },
+ "group": "build",
"problemMatcher": [],
"presentation": {
"reveal": "always",
@@ -62,4 +45,4 @@
"default": "COM22"
}
]
-}
\ No newline at end of file
+}
diff --git a/ex1.buzzer-music/.vscode/stm32flash.bat b/ex1.buzzer-music/.vscode/stm32flash.bat
deleted file mode 100644
index 0bcacc9..0000000
--- a/ex1.buzzer-music/.vscode/stm32flash.bat
+++ /dev/null
@@ -1,21 +0,0 @@
-@echo off
-setlocal
-
-set OBJCOPY=%GCC_BIN%\arm-none-eabi-objcopy.exe
-set PORT=%1
-
-echo ==^ Converting ELF to BIN...
-%OBJCOPY% -O binary %ELF% %BIN%
-if errorlevel 1 (
- echo objcopy failed!
- exit b 1
-)
-
-echo ==^ Flashing via %PORT% ...
-%FLASH_EXE% -w %BIN% -v -g 0x0 -b 115200 %PORT%
-if errorlevel 1 (
- echo stm32flash failed!
- exit b 1
-)
-
-echo ==^ Done.
\ No newline at end of file
diff --git a/ex1.buzzer-music/.vscode/stm32flash.exe b/ex1.buzzer-music/.vscode/stm32flash.exe
deleted file mode 100644
index a50272f..0000000
--- a/ex1.buzzer-music/.vscode/stm32flash.exe
+++ /dev/null
Binary files differ
diff --git a/ex1.buzzer-music/.vscode/tasks.json b/ex1.buzzer-music/.vscode/tasks.json
index c8d0ec6..3079dd6 100644
--- a/ex1.buzzer-music/.vscode/tasks.json
+++ b/ex1.buzzer-music/.vscode/tasks.json
@@ -2,22 +2,16 @@
"version": "2.0.0",
"tasks": [
{
- "label": "STM32: Flash via ST-Link(SWD)",
+ "label": "STM32: Flash via ST-Link (SWD)",
"type": "shell",
- "command": "D:\\Program Files\\ST\\STM32CubeProgrammer\\bin\\STM32_Programmer_CLI.exe",
+ "command": "cube",
"args": [
- "-c port=SWD",
- "-e all",
- "-w",
- "${workspaceFolder}\\build\\Release\\ISKBoard.elf",
- "0x08000000",
- "-v",
+ "programmer",
+ "-c", "port=SWD", "freq=4000", "reset=HWrst",
+ "-w", "${workspaceFolder}\\build\\Release\\ISKBoard.elf",
"-rst"
],
- "group": {
- "kind": "build",
- "isDefault": false
- },
+ "group": "build",
"problemMatcher": [],
"presentation": {
"reveal": "always",
@@ -26,26 +20,15 @@
}
},
{
- "label": "STM32: Flash via stm32flash(UART)",
+ "label": "STM32: Flash via Serial (UART)",
"type": "shell",
- "command": "${workspaceFolder}/.vscode/stm32flash.bat",
+ "command": "cube",
"args": [
- "${input:comPort}"
+ "programmer",
+ "--connect", "port=${input:comPort}",
+ "-w", "${workspaceFolder}\\build\\Release\\ISKBoard.elf"
],
- "options": {
- "env": {
- "PATH": "${env:PATH}",
- "SystemRoot": "${env:SystemRoot}",
- "GCC_BIN": "${env:LOCALAPPDATA}\\stm32cube\\bundles\\gnu-tools-for-stm32\\14.3.1+st.2\\bin",
- "ELF": "${workspaceFolder}\\build\\Release\\ISKBoard.elf",
- "BIN": "${workspaceFolder}\\build\\Release\\ISKBoard.bin",
- "FLASH_EXE": "${workspaceFolder}\\.vscode\\stm32flash.exe"
- }
- },
- "group": {
- "kind": "build",
- "isDefault": false
- },
+ "group": "build",
"problemMatcher": [],
"presentation": {
"reveal": "always",
@@ -62,4 +45,4 @@
"default": "COM22"
}
]
-}
\ No newline at end of file
+}
diff --git a/ex1.servo-sg90/.vscode/stm32flash.bat b/ex1.servo-sg90/.vscode/stm32flash.bat
deleted file mode 100644
index 0bcacc9..0000000
--- a/ex1.servo-sg90/.vscode/stm32flash.bat
+++ /dev/null
@@ -1,21 +0,0 @@
-@echo off
-setlocal
-
-set OBJCOPY=%GCC_BIN%\arm-none-eabi-objcopy.exe
-set PORT=%1
-
-echo ==^ Converting ELF to BIN...
-%OBJCOPY% -O binary %ELF% %BIN%
-if errorlevel 1 (
- echo objcopy failed!
- exit b 1
-)
-
-echo ==^ Flashing via %PORT% ...
-%FLASH_EXE% -w %BIN% -v -g 0x0 -b 115200 %PORT%
-if errorlevel 1 (
- echo stm32flash failed!
- exit b 1
-)
-
-echo ==^ Done.
\ No newline at end of file
diff --git a/ex1.servo-sg90/.vscode/stm32flash.exe b/ex1.servo-sg90/.vscode/stm32flash.exe
deleted file mode 100644
index a50272f..0000000
--- a/ex1.servo-sg90/.vscode/stm32flash.exe
+++ /dev/null
Binary files differ
diff --git a/ex1.servo-sg90/.vscode/tasks.json b/ex1.servo-sg90/.vscode/tasks.json
index c8d0ec6..3079dd6 100644
--- a/ex1.servo-sg90/.vscode/tasks.json
+++ b/ex1.servo-sg90/.vscode/tasks.json
@@ -2,22 +2,16 @@
"version": "2.0.0",
"tasks": [
{
- "label": "STM32: Flash via ST-Link(SWD)",
+ "label": "STM32: Flash via ST-Link (SWD)",
"type": "shell",
- "command": "D:\\Program Files\\ST\\STM32CubeProgrammer\\bin\\STM32_Programmer_CLI.exe",
+ "command": "cube",
"args": [
- "-c port=SWD",
- "-e all",
- "-w",
- "${workspaceFolder}\\build\\Release\\ISKBoard.elf",
- "0x08000000",
- "-v",
+ "programmer",
+ "-c", "port=SWD", "freq=4000", "reset=HWrst",
+ "-w", "${workspaceFolder}\\build\\Release\\ISKBoard.elf",
"-rst"
],
- "group": {
- "kind": "build",
- "isDefault": false
- },
+ "group": "build",
"problemMatcher": [],
"presentation": {
"reveal": "always",
@@ -26,26 +20,15 @@
}
},
{
- "label": "STM32: Flash via stm32flash(UART)",
+ "label": "STM32: Flash via Serial (UART)",
"type": "shell",
- "command": "${workspaceFolder}/.vscode/stm32flash.bat",
+ "command": "cube",
"args": [
- "${input:comPort}"
+ "programmer",
+ "--connect", "port=${input:comPort}",
+ "-w", "${workspaceFolder}\\build\\Release\\ISKBoard.elf"
],
- "options": {
- "env": {
- "PATH": "${env:PATH}",
- "SystemRoot": "${env:SystemRoot}",
- "GCC_BIN": "${env:LOCALAPPDATA}\\stm32cube\\bundles\\gnu-tools-for-stm32\\14.3.1+st.2\\bin",
- "ELF": "${workspaceFolder}\\build\\Release\\ISKBoard.elf",
- "BIN": "${workspaceFolder}\\build\\Release\\ISKBoard.bin",
- "FLASH_EXE": "${workspaceFolder}\\.vscode\\stm32flash.exe"
- }
- },
- "group": {
- "kind": "build",
- "isDefault": false
- },
+ "group": "build",
"problemMatcher": [],
"presentation": {
"reveal": "always",
@@ -62,4 +45,4 @@
"default": "COM22"
}
]
-}
\ No newline at end of file
+}
diff --git a/ex1.ws2812b/.vscode/stm32flash.bat b/ex1.ws2812b/.vscode/stm32flash.bat
deleted file mode 100644
index 0bcacc9..0000000
--- a/ex1.ws2812b/.vscode/stm32flash.bat
+++ /dev/null
@@ -1,21 +0,0 @@
-@echo off
-setlocal
-
-set OBJCOPY=%GCC_BIN%\arm-none-eabi-objcopy.exe
-set PORT=%1
-
-echo ==^ Converting ELF to BIN...
-%OBJCOPY% -O binary %ELF% %BIN%
-if errorlevel 1 (
- echo objcopy failed!
- exit b 1
-)
-
-echo ==^ Flashing via %PORT% ...
-%FLASH_EXE% -w %BIN% -v -g 0x0 -b 115200 %PORT%
-if errorlevel 1 (
- echo stm32flash failed!
- exit b 1
-)
-
-echo ==^ Done.
\ No newline at end of file
diff --git a/ex1.ws2812b/.vscode/stm32flash.exe b/ex1.ws2812b/.vscode/stm32flash.exe
deleted file mode 100644
index a50272f..0000000
--- a/ex1.ws2812b/.vscode/stm32flash.exe
+++ /dev/null
Binary files differ
diff --git a/ex1.ws2812b/.vscode/tasks.json b/ex1.ws2812b/.vscode/tasks.json
index c8d0ec6..3079dd6 100644
--- a/ex1.ws2812b/.vscode/tasks.json
+++ b/ex1.ws2812b/.vscode/tasks.json
@@ -2,22 +2,16 @@
"version": "2.0.0",
"tasks": [
{
- "label": "STM32: Flash via ST-Link(SWD)",
+ "label": "STM32: Flash via ST-Link (SWD)",
"type": "shell",
- "command": "D:\\Program Files\\ST\\STM32CubeProgrammer\\bin\\STM32_Programmer_CLI.exe",
+ "command": "cube",
"args": [
- "-c port=SWD",
- "-e all",
- "-w",
- "${workspaceFolder}\\build\\Release\\ISKBoard.elf",
- "0x08000000",
- "-v",
+ "programmer",
+ "-c", "port=SWD", "freq=4000", "reset=HWrst",
+ "-w", "${workspaceFolder}\\build\\Release\\ISKBoard.elf",
"-rst"
],
- "group": {
- "kind": "build",
- "isDefault": false
- },
+ "group": "build",
"problemMatcher": [],
"presentation": {
"reveal": "always",
@@ -26,26 +20,15 @@
}
},
{
- "label": "STM32: Flash via stm32flash(UART)",
+ "label": "STM32: Flash via Serial (UART)",
"type": "shell",
- "command": "${workspaceFolder}/.vscode/stm32flash.bat",
+ "command": "cube",
"args": [
- "${input:comPort}"
+ "programmer",
+ "--connect", "port=${input:comPort}",
+ "-w", "${workspaceFolder}\\build\\Release\\ISKBoard.elf"
],
- "options": {
- "env": {
- "PATH": "${env:PATH}",
- "SystemRoot": "${env:SystemRoot}",
- "GCC_BIN": "${env:LOCALAPPDATA}\\stm32cube\\bundles\\gnu-tools-for-stm32\\14.3.1+st.2\\bin",
- "ELF": "${workspaceFolder}\\build\\Release\\ISKBoard.elf",
- "BIN": "${workspaceFolder}\\build\\Release\\ISKBoard.bin",
- "FLASH_EXE": "${workspaceFolder}\\.vscode\\stm32flash.exe"
- }
- },
- "group": {
- "kind": "build",
- "isDefault": false
- },
+ "group": "build",
"problemMatcher": [],
"presentation": {
"reveal": "always",
@@ -62,4 +45,4 @@
"default": "COM22"
}
]
-}
\ No newline at end of file
+}
diff --git a/stm32flash/bin/arm-none-eabi-objcopy.exe b/stm32flash/bin/arm-none-eabi-objcopy.exe
new file mode 100644
index 0000000..da2d9c4
--- /dev/null
+++ b/stm32flash/bin/arm-none-eabi-objcopy.exe
Binary files differ
diff --git a/stm32flash/bin/readme.txt b/stm32flash/bin/readme.txt
new file mode 100644
index 0000000..16bdf0a
--- /dev/null
+++ b/stm32flash/bin/readme.txt
@@ -0,0 +1,5 @@
+1. stm32flash.exe 是一个开源命令行工具,通过串口向 STM32 单片机的内置 ISP Bootloader 烧录、读取或校验固件,它只支持 .bin 文件。
+ 其下载地址: https://sourceforge.net/projects/stm32flash/files/stm32flash-0.7-binaries.zip/download
+
+2. arm-none-eabi-objcopy.exe 它拷贝自 STM32CubeIDE,是 GNU ARM 嵌入式工具链中的目标文件转换工具,常用于把编译生成的二进制
+ .elf/.hex 文件转换成 .bin 文件,以便烧录到单片机中。
diff --git a/ex1.auto-light/.vscode/stm32flash.exe b/stm32flash/bin/stm32flash.exe
similarity index 100%
rename from ex1.auto-light/.vscode/stm32flash.exe
rename to stm32flash/bin/stm32flash.exe
Binary files differ
diff --git a/stm32flash/config.ini b/stm32flash/config.ini
new file mode 100644
index 0000000..d4be292
--- /dev/null
+++ b/stm32flash/config.ini
@@ -0,0 +1,4 @@
+[COMMON]
+COM_PORT=COM22
+BAUDRATE=115200
+PRJPATH=..
\ No newline at end of file
diff --git a/stm32flash/stm32flash.bat b/stm32flash/stm32flash.bat
new file mode 100644
index 0000000..81d1997
--- /dev/null
+++ b/stm32flash/stm32flash.bat
@@ -0,0 +1,147 @@
+@echo off
+setlocal EnableDelayedExpansion
+set PATH=%PATH%;bin
+
+rem ====================================================
+rem 配置
+rem ====================================================
+set STM32FLASH=stm32flash.exe
+set ADDRESS=0x8000000
+
+rem ====================================================
+rem 解析 config.ini
+rem ====================================================
+for /f "usebackq tokens=1,2 delims==" %%a in ("config.ini") do (
+ if /i "%%a"=="COM_PORT" set COM_PORT=%%b
+ if /i "%%a"=="BAUDRATE" set BAUDRATE=%%b
+ if /i "%%a"=="PRJPATH" set PRJPATH=%%b
+)
+
+if not defined COM_PORT (
+ echo [ERROR] COM_PORT not found in config.ini
+ pause & exit /b 1
+)
+if not defined BAUDRATE set BAUDRATE=115200
+if not defined PRJPATH set PRJPATH=..
+
+rem 转为绝对路径
+pushd "%PRJPATH%" >nul 2>&1
+if errorlevel 1 (
+ echo [ERROR] PRJPATH "%PRJPATH%" does not exist
+ pause & exit /b 1
+)
+set PRJPATH_ABS=%CD%
+popd
+
+echo Project root: "%PRJPATH_ABS%"
+echo COM port: %COM_PORT% @ %BAUDRATE% bps
+echo.
+
+rem ====================================================
+rem 扫描固件文件
+rem 优先级: MDK-ARM(hex) -> Release -> Debug
+rem ====================================================
+set INDEX=0
+
+echo Scanning for firmware files...
+
+for /r "%PRJPATH_ABS%" %%f in (
+ MDK-ARM\ISKBoard\ISKBoard.hex
+ build\Release\ISKBoard.elf
+ build\Debug\ISKBoard.elf
+) do (
+ if exist "%%f" (
+ set /a INDEX+=1
+ set "FILE_!INDEX!=%%f"
+ echo !INDEX!^) %%~f
+ )
+)
+
+if %INDEX%==0 (
+ echo [ERROR] No firmware file found under "%PRJPATH_ABS%"
+ echo Expected patterns:
+ echo - MDK-ARM/ISKBoard/ISKBoard.hex
+ echo - build/Release/ISKBoard.elf
+ echo - build/Debug/ISKBoard.elf
+ pause & exit /b 1
+)
+
+echo.
+set /p CHOICE="Select firmware to flash [1-%INDEX%]: "
+
+rem 校验输入
+if "%CHOICE%"=="" (
+ echo [ERROR] No selection made
+ pause & exit /b 1
+)
+if %CHOICE% LSS 1 (
+ echo [ERROR] Invalid selection
+ pause & exit /b 1
+)
+if %CHOICE% GTR %INDEX% (
+ echo [ERROR] Invalid selection
+ pause & exit /b 1
+)
+
+call set SELECTED_FILE=%%FILE_%CHOICE%%%
+echo.
+echo Selected: "%SELECTED_FILE%"
+echo.
+
+rem ====================================================
+rem 确定输出 bin 文件路径(放在源文件同目录下)
+rem ====================================================
+for %%f in ("%SELECTED_FILE%") do set "BIN_FILE=%%~dpnf.bin"
+
+rem ====================================================
+rem 转换 hex/elf -> bin
+rem ====================================================
+echo Converting to binary...
+
+for %%f in ("%SELECTED_FILE%") do set "EXT=%%~xf"
+
+if /i "%EXT%"==".hex" (
+ arm-none-eabi-objcopy.exe -I ihex -O binary "%SELECTED_FILE%" "%BIN_FILE%"
+) else if /i "%EXT%"==".elf" (
+ arm-none-eabi-objcopy.exe -O binary "%SELECTED_FILE%" "%BIN_FILE%"
+) else (
+ echo [ERROR] Unsupported file type: "%EXT%"
+ pause & exit /b 1
+)
+
+if %errorlevel% neq 0 (
+ echo [ERROR] objcopy conversion failed. Error code: %errorlevel%
+ pause & exit /b 1
+)
+
+echo Binary ready: "%BIN_FILE%"
+echo.
+
+rem ====================================================
+rem ISP 模式提示(共用入口)
+rem ====================================================
+:ISP_FLASH
+echo ====================================================
+echo Serial port: %COM_PORT% @ %BAUDRATE% bps
+echo.
+echo Please ensure ISKBoard is in ISP mode,
+echo then press any key to start flashing...
+echo ====================================================
+pause >nul
+
+rem ====================================================
+rem 执行烧录
+rem ====================================================
+echo.
+echo Flashing...
+%STM32FLASH% -b %BAUDRATE% -w "%BIN_FILE%" -v -g %ADDRESS% %COM_PORT%
+
+if %errorlevel% neq 0 (
+ echo [ERROR] Flashing failed. Error code: %errorlevel%
+ pause & exit /b 1
+)
+
+echo.
+echo [SUCCESS] Firmware flashed and verified!
+
+endlocal
\ No newline at end of file
--
Gitblit v1.10.0