Изменения

STM

3655 байт добавлено, 15:46, 28 августа 2021
Нет описания правки
== Подключение платы к программатору ==
Далее нам потребуется программатор [[требует оборудование::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_&lt;тут идёт некий идентификатор сборки&gt;/&lt;название скетча&gt;/.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/
[[Категория:База знаний]]