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
---
stm32flash/stm32flash.bat | 147 +++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 147 insertions(+), 0 deletions(-)
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