1013
правок
Изменения
STM
,Нет описания правки
== Подключение платы к программатору ==
Далее нам потребуется программатор [[требует оборудование::ST-LINK V2]], официальная версия или китайский клон.
Подключаем плату на STM32 к компьютеру через программатор:
Загружаем.
= Отладка через OpenOCD =
Здесь даны примеры отладки STM32F103 на АЛЬТ Образование 9.2, но данный пример может быть перенесён на другие системы GNU/Linux.
== Установка отладчика ==
<pre>
$ sudo apt-get install arm-none-eabi-gdb
</pre>
== Установка OpenOCD ==
<pre>
$ sudo apt-get install openocd
</pre>
== Запуск OpenOCD ==
Надо создать конфигруационный файл (назовём его <code>stm32f103c8_blue_pill.cfg</code>) со следующим содержимым (за основу взята [https://github.com/openocd-org/openocd/blob/master/tcl/board/stm32f103c8_blue_pill.cfg конфигурация] из официального репозитория):
<pre>
# 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]
</pre>
Запускаем OpenOCD с созданной конфигурацией:
<pre>
$ openocd -f stm32f103c8_blue_pill.cfg
</pre>
Если всё хорошо, то сервер отладчика начинает слушать адрес и порт <code>localhost:3333</code>.
== Запуск отладчика ==
В новой консоли запускаем:
<code>
$ arm-none-eabi-gdb
</code>
Появляется консоль отладчика. Подключаемся к серверу OpenOCD:
<code>
(gdb) target remote localhost:3333
Remote debugging using localhost:3333
0x00000000 in ?? ()
</code>
== Загрузка отладочных символов ==
Если для сборки проекта использовалась Arduino IDE, то результат сборки будет лежать где-то в
<pre>
/tmp/arduino_build_<тут идёт некий идентификатор сборки>/<название скетча>/.ini.elf
</pre>
Например:
<pre>
/tmp/arduino_build_830390/stm_pwm.ino.elf
</pre>
Тогда подгрузить отладочные символы можно так:
<pre>
(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.
</pre>
== Начало отладки ==
<pre>
(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() {
</pre>
Как видим, точка останова успешно сработала.
== Источники ==
* http://www.mjblythe.com/hacks/2013/02/debugging-stm32-with-gdb-and-openocd/
[[Категория:База знаний]]