Работа с STM32 ST-LINK Utility через консоль

Консольная утилита ST-LINK_CLI

Не для кого не секрет, что для прошивки контроллеров семейства stm32 есть утилита STM32 ST-LINK Utility с графическим интерфейсом и неплохим функционалом. В комплекте с графическим интерфейсом утилиты так же идёт консольная версия — ST-LINK_CLI.exe .

Консольная утилита ST-LINK_CLI

Консольная утилита ST-LINK_CLI

Графический интерфейс утилиты STM32 ST-LINK Utility хорошо подходит для ручной, наглядной, прошивки контроллера и конфигурации его памяти и регистров, консольную утилиту можно подключить к средам разработки и с её помощью автоматизировать прошивку серии контроллеров.

Функционал консольной утилиты тот же, что и у утилиты с графическим интерфейсом, только вся работа идёт через консоль.

Что бы получить перечень поддерживаемых команд утилитой ST-LINK_CLI достаточно её запустить без параметров.

Рассмотрим основные команды:
Рассмотрим основные команды:
-Rst — сброс, перезагрузка камня
-ME — очисть всю flash память
-SE — стереть выбранные сектора flash памяти (обычно один сектор занимает 1КБ или 0x0400 для low и medium семейств контроллеров)
Синтаксис: -SE <Start_Sector> [<End_Sector>]
пример:

"C:\Program Files (x86)\STMicroelectronics\STM32 ST-LINK Utility\ST-LINK Utility\ST-LINK_CLI.exe" -SE 0 4

STM32 ST-LINK CLI v2.0.0
STM32 ST-LINK Command Line Interface

ST-LINK SN : 0123456789ABCDEF12345678
ST-LINK Firmware version : V2J21S4
Connected via SWD.
Connection mode : Normal.
Device ID:0x440
Device flash Size : 64 Kbytes
Device family :STM32F030xx/F051xx/F071xx
Memory Sector @0x08000000 erased.
Memory Sector @0x08000400 erased.
Memory Sector @0x08000800 erased.
Memory Sector @0x08000C00 erased.
Memory Sector @0x08001000 erased.

-P — загрузка прошивки
Синтаксис: -P <File_Path> [<Address>]
пример:

C:\Users\Alex>"C:\Program Files (x86)\STMicroelectronics\STM32 ST-LINK Utility\S
T-LINK Utility\ST-LINK_CLI.exe" -P "D:\project1\lite.bin" 0x08000000
STM32 ST-LINK CLI v2.0.0
STM32 ST-LINK Command Line Interface

ST-LINK SN : 0123456789ABCDEF12345678
ST-LINK Firmware version : V2J21S4
Connected via SWD.
Connection mode : Normal.
Device ID:0x440
Device flash Size : 64 Kbytes
Device family :STM32F030xx/F051xx/F071xx
Loading file...
Flash Programming:
File : D:\project1\lite.bin
Address : 0x08000000
Flash memory programming...
██████████████████████████████████████████████████ 100%
Flash memory programmed in 0s and 94ms.
Programming Complete.

-V — верификация
Работа с опциональными байтами
-OB RDP=<Level> — установка защиты от чтения памяти
0 — защита отключена
1 — защита включена
2 — защита включена (отладчик и загрузчик в SRAM использовать можно)

Используя данную утилиту можно написать скрипт, которым можно прошивать и конфигурировать контроллеры вводом одной команды. Например: прошьём и перезагрузим контроллер.

"C:\Program Files (x86)\STMicroelectronics\STM32 ST-LINK Utility\S
T-LINK Utility\ST-LINK_CLI.exe" -P "D:\project1\project1.bin" 0x08000000
"C:\Program Files (x86)\STMicroelectronics\STM32 ST-LINK Utility\S
T-LINK Utility\ST-LINK_CLI.exe" -Rst

Если добавить goto и pause то можно будет перепрошивать серию контроллеров одним нажатием клавиши.

Скрипт можно написать в любом текстовом редакторе, например блокноте и сохранить с разрешением *.bat, если будете его использовать проверьте пути к утилите ST-LINK_CLI.exe и укажите путь к своей прошивке.

Другой пример использования консольной утилиты ST-LINK_CLI. Есть задача по прошивки серии устройств на основе контроллера stm32. На плате во время её проектирования были предусмотрены специальные площадки для удобного подключения программатора, в который можно запаять или штыревой PLS разъём, или подсоединяться к ним нему используя специальный щуп из подпружиненных контактов. В контроллере находится 2 прошивки: основная прошивка и загрузчик, идентификатор устройства и блок данных. Контроллер нужно прошить, проверить целостность прошитых данных и защитить контроллер от считывания. Для данной цели за пару часов была написана небольшая утилита с графическим интерфейсом (в некоторых случаях на этапе отладки нужно без проблем менять некоторые параметры прошивки — это куда проще сделать щёлкнув по паре галочек), которая используя консольную утилиту ST-LINK_CLI прошивает и конфигурирует контроллер за пол минуты, когда при ручной прошивки контроллера на это уйдёт куда больше времени.

Самописная утилита для прошивки устройств

Самописная утилита для прошивки устройств

8 комментариев »

Alex_EXE | 12.03.2017 | STM32 |

8 комментариев на « Работа с STM32 ST-LINK Utility через консоль»

  1. Serj пишет 06.10.2018 в 00:18 #

    А ещё с помощью ST-LINK_CLI можно прошивать и запускать программу из ОЗУ (RAM).
    ST-LINK_CLI.exe -c SWD Freq=4000 -P Output\STMF103_LCD_ST8835.hex -Run 0x20000000 -Q -NoPrompt
    Можно написать .bat или сконфигурировать внешнюю утилиту для программирования в Keil µVision и шить кнопкой Download. В µVision удобнее.

  2. Alex_EXE пишет 22.10.2018 в 01:25 #

    Спасибо, может пригодиться.

  3. Александр пишет 30.01.2020 в 00:35 #

    Для версии st-link_cli 3.5.0.0 команда для запуска программы из ОЗУ чуть изменилась.

    st-link_cli -c SWD SWCLK=4000 -P «build\main.bin» 0x20000000 -Run 0x20000000 -Q -NoPrompt

    И шить надо BIN, а не HEX.
    Спасибо за наводку, в любом случае.

  4. ВитГо пишет 26.12.2020 в 15:02 #

    А кто нить разбирался как при помощи командной строки делается отладка ? то есть запустили с 0800 0000 и потом по шагам исполнять прошивку ?

    что то я не понял как это делать, есть команда step но не получается ее использовать…

    как то нужно микроконтроллер в режим отладки вводить ?
    или подключаться для отладки без сброса ?

    кто нить пробовал ?

    p.s. нужно для этого https://vk.com/club200545792

  5. aabdev пишет 08.01.2022 в 22:12 #

    Как защитить микроконтроллер от загрузки чужеродного кода?

  6. aabdev пишет 08.01.2022 в 22:12 #

    Сохраняет ли RAM память значение после программного Reset(а)?

  7. Alex_EXE пишет 11.01.2022 в 20:07 #

    У СТМ, как и у многих контроллерв есть фьюзы защиты памяти от чтения.
    Для stm32f051 и старой среды CoCoox
    if(FLASH_OB_GetRDP() != SET)
    {
    FLASH_Unlock();
    FLASH_OB_Unlock();
    FLASH_OB_RDPConfig(OB_RDP_Level_1);
    delay_ms(1000);
    FLASH_OB_Launch();
    delay_ms(1000);
    FLASH_Lock();
    }

    Там ещё нужно библиотеки подключить, включить тактирование нужных узлов…

    На второй вопрос не отвечу точно. Вроде сохраняет, но выполняющаяся программа может её задействовать в своих целях.

  8. Алексей пишет 18.09.2024 в 12:32 #

    Поделитесь пожалуйста этой утилитой с графическим интерфейсом если будет такое желание. Спасибо за статью!

Комментарии RSS

Оставьте отзыв