STM — различия между версиями

Материал из CADR
Перейти к: навигация, поиск
(Новая страница: «= Arduino IDE = Одним из вариантов окружения для работы с STM является может использовать::Arduino I…»)
 
Строка 19: Строка 19:
  
 
== Подключение платы к программатору ==
 
== Подключение платы к программатору ==
Далее нам потребуется программатор ST-LINK V2, официальная версия или китайский клон.
+
Далее нам потребуется программатор [[требует оборудование::ST-LINK V2]], официальная версия или китайский клон.
  
 
Подключаем плату на STM32 к компьютеру через программатор:
 
Подключаем плату на STM32 к компьютеру через программатор:
Строка 39: Строка 39:
  
 
Загружаем.
 
Загружаем.
 +
 +
= Отладка через 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/
  
 
[[Категория:База знаний]]
 
[[Категория:База знаний]]

Версия 15:46, 28 августа 2021

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

Здесь даны примеры отладки 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() {

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

Источники