
Порой бывает так, что вы скачиваете репозиторий, а там нет файлов .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 |
|
Настройка ToolChain(а) для Win10+GCC+С+Makefile+ARM Cortex-Mx+GDB |
|
Сайт, где можно скачать GDB клиент для ARM процессоров. |
|
16 Способов Отладки и Диагностики FirmWare |
|
GDB Client команды |
https://docs.google.com/spreadsheets/d/1AWD8GsDfaA9dtdsfqgbB1klagou1yrREc1AAK9CRUik/edit?gid=0#gid=0 |
Пошаговая GDB отладка ARM процессора из консоли в Win10 |
|
GDB Client команды |
https://docs.google.com/spreadsheets/d/1AWD8GsDfaA9dtdsfqgbB1klagou1yrREc1AAK9CRUik/edit?gid=0#gid=0 |
Error |
Комментарии (11)

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.

NutsUnderline
05.01.2026 16:26все можно засунуть в bat только вроде еще проще иметь еще одну китайскую платку за три копейки с этой bmp прошивкой. в таком же ключе сделаны отладчики dap-link и еще чего там, много всякого сделали
segment
Можно было дополнить рассказом про GDB TUI режим.
aabzel Автор
Я бы с радостью, однако arm-none-eabi-gdb.exe: не поддерживает TUI режим
ReadOnlySadUser
Хтож embedded разработкой из-под винды занимается)
aabzel Автор
Всё очень просто.
У нас программисты МК вынуждены еще в Altium Designer PCB разглядывать. Найти нужную дорожку, чтобы осциллограф приложить и всё такое.
Поэтому всем разработчикам просто взяли и накатили Windows 10.
Так как Altium Designer для Linux просто нет.
Vadimatorikda
Мы с выходом kicad 5 от него отказались. Правда перенос был тяжким. Но того стоило
aabzel Автор
Какие еще есть варианты кроме kicad и Altium Designer?
osmanpasha
Altium cloud, или как он там называется?
NutsUnderline
есть Дельта Дизайн фишка которого была в автотрассировщике с дивным названием Топор , он умеет дорожки под разным углом. В новой версии сделали сборку под linux (не нативную вроде под wine). Стоит дикостно, типа импортозамещение и все такое.
Dr_Zlo13
Altium 360 работает в вебе и позволяет иметь любую удобную ос для разработки.