Содержание

Arduino IDE

Одним из вариантов окружения для работы с STM является Arduino IDE. Установка Arduino IDE рассмотрена в статье Arduino.

Установка поддержки STM32

В менеджер плат надо добавить следующую ссылку: http://dan.drown.org/stm32duino/package_STM32duino_index.json

Ставим новый набор плат STM32F1xx/GD32F1xx через менеджер плат.

Настройка системы

После этого устанавливаем правила UDev, чтобы права на устройство выдавались для нашего пользователя. Допустим, ваш пользователь -- avp:

$ sudo cp /home/avp/.arduino15/packages/stm32duino/tools/stm32tools/2021.5.31/linux/49-stlinkv* /etc/udev/rules.d/

Даём команду UDev перечитать правила:

$ sudo udevadm control --reload-rules

Подключение платы к программатору

Далее нам потребуется программатор ST-LINK V2, официальная версия или китайский клон.

Подключаем плату на STM32 к компьютеру через программатор:

Ножка на программаторе   | Ножка на плате
-------------------------+---------------
3.3V                     | 3.3
GND                      | GND
RST                      | R
SWCLK                    | DCLK
SWDIO                    | DIO

Загрузка прошивки

Выбираем в списке плат "Generic STM32F103c series" (или ту плату, которая у вас.)

"Upload method" (Способ загрузки) выбираем "STLink".

Загружаем.

Отладка через OpenOCD

STM32F103C8 PWM

Здесь даны примеры отладки STM32F103 на АЛЬТ Образование 9.2, но данный пример может быть перенесён на другие системы GNU/Linux.

Установка отладчика

$ sudo apt-get install arm-none-eabi-gdb

Установка OpenOCD

$ sudo apt-get install openocd

Запуск OpenOCD

Надо создать конфигруационный файл (назовём его stm32f103c8_blue_pill.cfg) со следующим содержимым (за основу взята конфигурация из официального репозитория):

# STM32F103C8 "Blue Pill"

# NOTE:
# There is a fair bit of confusion about whether the "Blue Pill" has 128kB or 64kB flash size.
# The most likely cause is that there exist a -C8 and a -CB variant of the STM32F103, where
# the C8 has 64kB, the CB has 128kB as per specification. "Blue Pill" boards are manufactured
# by a lot of different vendors, some may actually use the CB variant but from a cursory look
# it very hard to tell them apart ("C8" and "CB" look very similar). Nevertheless, people have
# tried using the full 128kB of flash on the C8 and found it to be working. Hence this board file
# overrides the internal size detection. Be aware though that you may be using you particular
# board outside of its specification. If in doubt, comment the following line.

source [find interface/stlink-v2.cfg]

transport select hla_swd

set FLASH_SIZE 0x20000

source [find target/stm32f1x.cfg]

Запускаем OpenOCD с созданной конфигурацией:

$ openocd -f stm32f103c8_blue_pill.cfg

Если всё хорошо, то сервер отладчика начинает слушать адрес и порт localhost:3333.

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

В новой консоли запускаем: $ arm-none-eabi-gdb

Появляется консоль отладчика. Подключаемся к серверу OpenOCD: (gdb) target remote localhost:3333 Remote debugging using localhost:3333 0x00000000 in ?? ()

Загрузка отладочных символов

Если для сборки проекта использовалась Arduino IDE, то результат сборки будет лежать где-то в

/tmp/arduino_build_<тут идёт некий идентификатор сборки>/<название скетча>/.ini.elf

Например:

/tmp/arduino_build_830390/stm_pwm.ino.elf

Тогда подгрузить отладочные символы можно так:

(gdb) file /tmp/arduino_build_830390/stm_pwm.ino.elf
A program is being debugged already.
Are you sure you want to change the file? (y or n) y
Reading symbols from /tmp/arduino_build_830390/stm_pwm.ino.elf...done.

Начало отладки

(gdb) monitor reset halt
(gdb) load
(gdb) break loop
(gdb) continue
Continuing.
Note: automatically using hardware breakpoints for read-only addresses.

Breakpoint 1, loop () at /home/avp/Arduino/stm_pwm/stm_pwm.ino:38
38	void loop() {

Как видим, точка останова успешно сработала.

Источники