guowenxue
4 days ago 53de825c4c4d8325c02341177f62ab84897eb5ee
update vscode task.json and add stm32flash tools
4 files modified
7 files deleted
1 files renamed
4 files added
412 ■■■■ changed files
ex1.auto-light/.vscode/stm32flash.bat 21 ●●●●● patch | view | raw | blame | history
ex1.auto-light/.vscode/tasks.json 43 ●●●●● patch | view | raw | blame | history
ex1.buzzer-music/.vscode/stm32flash.bat 21 ●●●●● patch | view | raw | blame | history
ex1.buzzer-music/.vscode/stm32flash.exe patch | view | raw | blame | history
ex1.buzzer-music/.vscode/tasks.json 43 ●●●●● patch | view | raw | blame | history
ex1.servo-sg90/.vscode/stm32flash.bat 21 ●●●●● patch | view | raw | blame | history
ex1.servo-sg90/.vscode/stm32flash.exe patch | view | raw | blame | history
ex1.servo-sg90/.vscode/tasks.json 43 ●●●●● patch | view | raw | blame | history
ex1.ws2812b/.vscode/stm32flash.bat 21 ●●●●● patch | view | raw | blame | history
ex1.ws2812b/.vscode/stm32flash.exe patch | view | raw | blame | history
ex1.ws2812b/.vscode/tasks.json 43 ●●●●● patch | view | raw | blame | history
stm32flash/bin/arm-none-eabi-objcopy.exe patch | view | raw | blame | history
stm32flash/bin/readme.txt 5 ●●●●● patch | view | raw | blame | history
stm32flash/bin/stm32flash.exe patch | view | raw | blame | history
stm32flash/config.ini 4 ●●●● patch | view | raw | blame | history
stm32flash/stm32flash.bat 147 ●●●●● patch | view | raw | blame | history
ex1.auto-light/.vscode/stm32flash.bat
File was deleted
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"
        }
    ]
}
}
ex1.buzzer-music/.vscode/stm32flash.bat
File was deleted
ex1.buzzer-music/.vscode/stm32flash.exe
Binary files differ
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"
        }
    ]
}
}
ex1.servo-sg90/.vscode/stm32flash.bat
File was deleted
ex1.servo-sg90/.vscode/stm32flash.exe
Binary files differ
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"
        }
    ]
}
}
ex1.ws2812b/.vscode/stm32flash.bat
File was deleted
ex1.ws2812b/.vscode/stm32flash.exe
Binary files differ
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"
        }
    ]
}
}
stm32flash/bin/arm-none-eabi-objcopy.exe
Binary files differ
stm32flash/bin/readme.txt
New file
@@ -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 文件,以便烧录到单片机中。
stm32flash/bin/stm32flash.exe
Binary files differ
stm32flash/config.ini
New file
@@ -0,0 +1,4 @@
[COMMON]
COM_PORT=COM22
BAUDRATE=115200
PRJPATH=..
stm32flash/stm32flash.bat
New file
@@ -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