Порой бывает так, что вы скачиваете репозиторий, а там нет файлов .project и .сproject для eclipse или файлы .project и .сproject есть, но они, внезапно, по каким-то причинам повреждены и IDE их просто не может открыть. Тем не менее, прошивка собирается командой make all. Затем ты ее прошиваешь и LED не мигает. Очевидно, что прошивка зависла (заклинила). Где-то свалилась в HardFault_Handler. Тут не надо впадать в судороги конвульсии и паралич. В этом случае надо просто взять и запускать пошаговую отладку из консоли. Это классический способ разобраться, где же произошла осечка.

Загрузка прошивки в микроконтроллер

Залить прошивку можно утилитой ST-LINK_CLI.exe вот таким простым скриптом

echo off
cls

set project_name=some_firmware
set project_dir=%cd%

echo project_dir=%project_dir%
set artefact_hex=%project_dir%\build\%project_name%.hex
echo artefact_hex=%artefact_hex%
set FlashTool=ST-LINK_CLI.exe
set Device=
set options= -c %Device% 
set options=%options% SWD freq=2000 HOTPLUG  
set options=%options% -P %artefact_hex% 
set options=%options% -V "after_programming" 
set options=%options% -Log
set options=%options% -TVolt

call %FlashTool% %options%
call %FlashTool% -Rst

Пуск отладочного сервера (Back-End) .

Для пошаговой отладки надо установить GDB Server. Это утилита-переходник, которая с одной стороны допрашивает микропроцессор по SWD (или JTAG), а с другой стороны обслуживает TCP сокет к которому подключится отладчик arm-none-eabi-gdb.exe к порту с номером 61234.  Эту утилиту можно извлечь из набора утилит от Atollic TrueSTUDIO. Atollic TrueSTUDIO(R) for STM32 можно скачать с сайта ST.com.

Надо зарегистрироваться на сайте st.com. Скачивать дистрибутив en.TrueSTUDIO_V9.3.exe.exe получится при помощи VPN  так как РФ у ST числится, как санкционная территория.

ST-LINK_gdbserver установлен в 

C:\Program Files (x86)\Atollic\TrueSTUDIO for STM32 9.3.0\Servers\ST-LINK_gdbserver\ST-LINK_gdbserver.exe

Нужно добавить в переменную Path путь к папке с утилитами binutils компилятора. В данном случае этот путь выглядит так:

C:\Program Files (x86)\GNU Tools ARM Embedded\5.4 2016q3\bin\

Затем перейти в папку:

C:\Program Files (x86)\Atollic\TrueSTUDIO for STM32 9.3.0\Servers\ST-LINK_gdbserver

и запустить скрипт  ST-LINK_gdbserver.bat.

C:\Program Files (x86)\Atollic\TrueSTUDIO for STM32 9.3.0\Servers\ST-LINK_gdbserver\ST-LINK_gdbserver.bat

Бинарь с отладочным сервером для STM32 можно найти в Atollic True STUDIO

echo off
cls
set AtolicDir=C:\Program Files (x86)\Atollic\TrueSTUDIO for STM32 9.3.0
set GDBServerDir=%AtolicDir%\Servers\ST-LINK_gdbserver
set GDBServerPath="%GDBServerDir%\ST-LINK_gdbserver.bat"
cd %GDBServerDir%
call %GDBServerPath% 

При пуске ST-LINK_gdbserver.bat появится такой лог загрузки.

Сервер ждет подключения клиента. Серверу всё равно какую прошивку отлаживать. Он сам по себе.

Пуск GDB клиента  (Front-End )

GDB сервер работает в тандеме с GDB клиентом. GDB клиент берётся из GNU ARM Embedded ToolChain. ToolChain следует брать с официального сайта https://developer.arm.com/

Toolchain устанавливается как обычная win программа прямо из gcc-arm-none-eabi-10.3-2021.10-win32.exe файла

Проверка, что установилось. Вот полный комплект GCC ARM. Всего 32 утилиты.

Надо прописать адрес toolchain в переменной Path. Вам нужна только консольная утилита arm-none-eabi-gdb.exe. У нее только один аргумент elf фал.

set elf_file=project.elf
arm-none-eabi-gdb.exe  %elf_file%

Подключиться к отладочному серверу через порт 61234. Клиент и сервер обмениваются информацией по порту 61234

target remote localhost:61234

До пуска программы можно задать точку останова

b system_init_one 

Выглядит эта отладка примерно так

Само собой, в консоли GDB клиента есть история команд, и вы можете стрелками вверх/ вниз на клавиатуре набирать уже используемые в прошлом команды. Вам потребуются вот эти команды. Это джентельменский набор самых употребительных gdb команд.

Команда

Назначение

info locals

Показать локальные переменные

b function

Установить точку останова на функции с именем function

bt

Показать стек вызова функций

d

удалить все точки останова

d n

Удалить точку останова с номером n

с

Отпустить программу в режим свободного исполнения

f

Выполнить остаток функции

i b

Показать список всех точек останова

n

выполнить одну строчку кода

s

зайти во внутрь функции

info args

Показать аргументы текущей функции

jump main

Перезагрузиться

p count

напечатать значение переменной count

q

выйти из утилиты gdb

target remote localhost:2331

Подключиться к J-Link

Чтобы выйти из GDB клиента достаточно набрать в его консоли команду q (quit). Target все еще suspended. Поэтому также надо закрыть GDB сервер. Только после этого Target станет resumed и продолжит исполнять свой код.

Трюки для эффективной отладки прошивок

--Используйте HeartBeat LED. Так вы поймете, что прошивка зависла, если нет мигания.
--Используйте GPIO+Oscilloscope+DMM для физической отладки быстрых процессов
--Используйте утилиту STM Studio для построения графиков переменных по их адресу в ячейках RAM.
--Выводите тактирование на MCO и проверяете настройки PLL
--Если вы поймали HardFault и удалось извлечь значение регистров PC и LR, то можно определить на какой строчке упала прошивка выполнив преобразование адреса в номер строки утилитой arm-none-eabi-addr2line.exe.
--Можно расставлять assert-ы в коде
--Можно отлаживаться через UART-CLI.
--Выводите значение переменных на DAC (ЦАП) и проверяйте осциллографом
--Покрывайте код модульными тестами (программные скрепы). Это лучший способ найти ошибку в коде, который затруднительно пройти пошаговой отладкой. Плюс тесты помогут безопасно делать перестройку (рефакторинг). Сегодня российское общество испытывает явный дефицит программных скреп.

Итог

Удалось научиться пошагово отлаживать прошивку для STM32 без какой бы то ни было GUI-IDE. Даже без Eclipse. Прямо в консоли windows. Вот так просто и не затейливо.

Вот теперь Вы умеете делать пошаговую DBG отладку из консоли и можете учить этому других. Как сами видите, в GDB отладке через консоль нет вообще ничего сложного. Как по мне, дак, всякие там циклопические и дорогущие IDE (IAR, Keil и т п) для пошаговой отладки не особо-то и нужны как бы. Тем более в консольном отладчике, как правило, не надо проводить много времени. Подключился, поймал зависон, выполнил командц bt, понял, где зависла программа, отключился, починил и перепрошил. Вот и всё. Easy.

Потом, написав один набор скриптов запуска GDB, в консоли можно пошагово отлаживать ARM микроконтроллеры абсолютно любого вендора: STM32(ST), nRF5x(NS), CC26x2(TI), MDR32(M), LPC21xx (NXP). Меняться будут только GDB серверы. Всё остальное одинаково у всех. Ибо все же они - ARMы. При этом накладные расходы на установку Toolchain(а) для консольной пошаговой отладки минимальные и всё абсолютно бесплатно. Вам уже нравится консольный GDB?

PS. В частности мне удалось выяснить, что моя прошивка оказывается падала в HardFault_Handler из-за повторной инициализации тактирования PLL.

Словарь

Сокращение

Расшифровка

GDB

The GNU Project Debugger

SWD

Serial Wire Debug

RISC

reduced instruction set computer

VPN  

Virtual Private Network

GUI

graphical user interface

CLI

command-line interface

IDE

integrated development environment

ARM

Advanced RISC Machine

GCC

GNU Compiler Collection

Больше ссылок

Название ссылки

URL

Дайте мне 15 минут, и я изменю ваш взгляд на GDB @Djivs

https://habr.com/ru/articles/824638/

Настройка ToolChain(а) для Win10+GCC+С+Makefile+ARM Cortex-Mx+GDB

https://habr.com/ru/articles/673522/

Сайт, где можно скачать GDB клиент для ARM процессоров.

https://developer.arm.com/downloads/-/gnu-rm#:~:text=The%20GNU%20Arm%20Embedded%20Toolchain,Arm%20Cortex%2DR%20processor%20families.

16 Способов Отладки и Диагностики FirmWare

https://habr.com/ru/articles/681280/

GDB Client команды

https://docs.google.com/spreadsheets/d/1AWD8GsDfaA9dtdsfqgbB1klagou1yrREc1AAK9CRUik/edit?gid=0#gid=0

Пошаговая GDB отладка ARM процессора из консоли в Win10

https://habr.com/ru/articles/694708/

GDB Client команды

https://docs.google.com/spreadsheets/d/1AWD8GsDfaA9dtdsfqgbB1klagou1yrREc1AAK9CRUik/edit?gid=0#gid=0

Error
Note: automatically using hardware breakpoints for read-only addresses.

https://community.st.com/t5/stm32cubeide-mcus/could-some-expert-on-stm32f4-series-explain-the-meaning-of-the/td-p/120230

Комментарии (11)


  1. segment
    05.01.2026 16:26

    Можно было дополнить рассказом про GDB TUI режим.


    1. aabzel Автор
      05.01.2026 16:26

      Можно было дополнить рассказом про GDB TUI режим.

      Я бы с радостью, однако arm-none-eabi-gdb.exe: не поддерживает TUI режим



      1. ReadOnlySadUser
        05.01.2026 16:26

        Хтож embedded разработкой из-под винды занимается)


        1. aabzel Автор
          05.01.2026 16:26

          Всё очень просто.
          У нас программисты МК вынуждены еще в Altium Designer PCB разглядывать. Найти нужную дорожку, чтобы осциллограф приложить и всё такое.
          Поэтому всем разработчикам просто взяли и накатили Windows 10.
          Так как Altium Designer для Linux просто нет.


          1. Vadimatorikda
            05.01.2026 16:26

            Мы с выходом kicad 5 от него отказались. Правда перенос был тяжким. Но того стоило


            1. aabzel Автор
              05.01.2026 16:26

              Какие еще есть варианты кроме kicad  и Altium Designer?


              1. osmanpasha
                05.01.2026 16:26

                Altium cloud, или как он там называется?


              1. NutsUnderline
                05.01.2026 16:26

                есть Дельта Дизайн фишка которого была в автотрассировщике с дивным названием Топор , он умеет дорожки под разным углом. В новой версии сделали сборку под linux (не нативную вроде под wine). Стоит дикостно, типа импортозамещение и все такое.


          1. Dr_Zlo13
            05.01.2026 16:26

            Altium 360 работает в вебе и позволяет иметь любую удобную ос для разработки.


  1. 0xdead926e
    05.01.2026 16:26

    а еще существует такая штука, как black magic probe. можно зашить в дефолтный стлинк за три копейки. и тогда вместо всего вон того будет gdb firmware.elf, tar ext COM1 (или /dev/ttyACM0); mon sw scan; att 1 и поехали как обычно. для прошивки- load.

    один минус- если оставлять родной стлинковский бутлоадер (чтоб была возможность откатить прошивку стлинка без дополнительного swd-адаптера)- то придется каждое подключение адаптера к пеке выводить его из бутлоадера тем же stlink-cli.


    1. NutsUnderline
      05.01.2026 16:26

      все можно засунуть в bat только вроде еще проще иметь еще одну китайскую платку за три копейки с этой bmp прошивкой. в таком же ключе сделаны отладчики dap-link и еще чего там, много всякого сделали