No description
  • Assembly 95.9%
  • Makefile 4.1%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-04-24 23:47:46 +07:00
.gitignore добавил gitignore 2026-04-17 13:24:56 +07:00
main.s Лаб 4 СТМ рабочая 2026-04-24 23:47:46 +07:00
Makefile рабочее окружение + минимально рабочий main 2026-04-17 12:55:09 +07:00
README.md в readme добавил зависимости, сохранил main_last на всякий 2026-04-24 22:11:10 +07:00
startup_stm32f407vgtx.s рабочее окружение + минимально рабочий main 2026-04-17 12:55:09 +07:00
stm32_defs_converted.s конвертированный файл с константами 2026-04-17 23:32:21 +07:00
STM32F407VGTX_FLASH.ld рабочее окружение + минимально рабочий main 2026-04-17 12:55:09 +07:00

STM32 minimal project

Зависимости

Debian:

sudo apt install gcc-arm-none-eabi binutils-arm-none-eabi gdb-multiarch openocd make gdb-multiarch

ArchLinux:

sudo pacman -S arm-none-eabi-gcc arm-none-eabi-binutils gdb openocd make

Файлы

.
├── main.s                           # Основной файл с кодом на assembler
├── Makefile                         # Скрипт для сборки и записи в контроллер
├── README.md                        # Вы здесь
├── startup_stm32f407vgtx.s          # Код инициализации контроллера
└── STM32F407VGTX_FLASH.ld           # Файл линковщика

Файлы startup_stm32f407vgtx.s и STM32F407VGTX_FLASH.ld сгенерированы STM32CubeIDE и взяты из её проекта.

Написание кода

Код пишем в main.s, остальные файлы не трогаем. Сборка и запись происходит через make.

Собрать проект:

make clean && make

Залить на плату:

make flash

Удалить временные файлы после сборки:

make clean

Отладка

Запуск отладчика:

openocd -f interface/stlink-v2.cfg -f target/stm32f4x.cfg

Подключение GDB:

gdb-multiarch button_led.elf -ex "target remote :3333"

После подключения инициализируем GDB:

monitor reset halt        # Останавливает MCU на старте
load                      # Прошивает ELF в Flash
continue                  # Старт выполнения

Дальше:

stepi
info registers
x/10i $pc

Дальше можно дебажить. Таблица полезных команд GDB:

Управление выполнением

Ctrl+C Прервать выполнение программы

continue Продолжить выполнение

stepi Выполнить одну машинную инструкцию

nexti Как stepi, но без захода в ветвления/вызовы

finish Дойти до выхода из текущей функции

Breakpints

break main Остановиться в функции main

break *0x08000240 Остановиться по адресу

info breakpoints Показать все точки остановки

delete N Удалить breakpoint номер N

Регистры

info registers Показать все регисты CPU

print $r0 Показать конкретный регистр

print $pc Текущий адрес исполнения

print $sp Stack pointer

display $r0 Автоматически показывать при каждом шаге

Память

x/10x 0x20000000 10 слов памяти в hex (RAM)

x/10i $pc Дизассемблер текущей инструкции

x/4w $sp Посмотреть стек (4 слова)

x/s 0x20000000 Строка в памяти

Отладка кода

disassemble main Ассемблер функции

layout asm TUI режим (ассемблер)

layout regs Показ регистров в UI

si / stepi шаг по инструкциям

ni / nexti шаг без захода внутрь

OpenOCD команды через GDB

monitor reset halt Сброс + останов MCU

monitor reset init Полный reset + init debug

monitor halt Просто остановить CPU

monitor resume Продолжить (альтернатива continue)

Загрузка программы

load Залить ELF в Flash

file button_led.elf Переключить бинарник