Пакетный файл для автоматизации прошивки STM32 - PullRequest
1 голос
/ 05 ноября 2019

Чтобы прошить с помощью ST-Link Utility, я написал следующую команду, которая работает:

"C:\Program Files\STMicroelectronics\STM32 ST-Link Utility\ST-Link_CLI.exe" -c SN=XXXXXXXXXXXXX SWD UR FREQ=400 -P "C:\flash STM32\test.hex" -V -HardRst

Я хотел бы автоматизировать это, получив серийный номер с помощью команд ST-Link_CLI.exe и *Файл 1005 * в папке, в которой находится пакетный файл, так что я могу просто щелкнуть этот файл .bat для прошивки с использованием любого подключенного отладчика (SN).

Я могу получить серийный номер, используя это:

@echo off
setlocal EnableDelayedExpansion
set "output_cnt=0"
for /F "delims=" %%f in ('"C:\Program Files\STMicroelectronics\STM32 ST-LINK Utility\ST-LINK Utility\ST-LINK_CLI.exe" -List') do (
    set /a output_cnt+=1
    set "output[!output_cnt!]=%%f"
)
for /L %%a in (1 1 !output_cnt!) do call echo !output[%%a]!
pause
set "str=SN"
for /L %%n in (1 1 !output_cnt!) do (
    echo !output[%%n]!|find "SN" >nul
    if errorlevel 1 (echo notfound) else (echo found at!output[%%n]!)
)
pause

!output[%%a]! равно " SN:XXXXXXXXXXX", когда строка в output_cnt содержит строку SN

Я полностью новичок в написании эффективных пакетных сценариев, и мне было интересно, может ли кто-нибудь помочь мне автоматизировать эту задачу.

Обновленный код:

set "STfilepath=C:\Program Files\STMicroelectronics\STM32 ST-LINK Utility\ST-LINK Utility\ST-LINK_CLI.exe"
set "output_cnt=0"
for /F "delims=" %%f in ('"!STfilepath!" -List') do (
    set /a output_cnt+=1
    set "output[!output_cnt!]=%%f"
)
::iterate thru output array to find SN and parse it to get the serial number
set "serial=NONE"
for /L %%n in (1 1 !output_cnt!) do (
    echo !output[%%n]!
    FOR /F "tokens=1,* delims=: " %%1 in ("!output[%%n]!") do (
        if "%%1" == "SN" (
            set "serial=%%2"
        )
    )
)
echo serial number is !serial!
set "hexfile=NONE"
for /r %%i in (*.hex) do (set "hexfile=%%i")
echo hexfile is !hexfile!
set "CMD="!STfilepath!" -c SN=!serial! SWD UR FREQ=400 -P "!hexfile!" -V -HardRst"
echo %CMD%
%CMD%
pause

1 Ответ

0 голосов
/ 05 ноября 2019

Вы можете разбить строку с помощью цикла FOR /F.

...
set "serial=NONE"
for /L %%n in (1 1 !output_cnt!) do (
    echo !output[%%n]!
    FOR /F "tokens=1,* delims=: " %%1 in ("!output[%%n]!") do (
        if "%%1" == "SN" (
            set "serial=%%2"
        )
    )
)
echo Found serial: !serial!
...