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