STM — различия между версиями
Avp (обсуждение | вклад) (Новая страница: «= Arduino IDE = Одним из вариантов окружения для работы с STM является может использовать::Arduino I…») |
Avp (обсуждение | вклад) |
||
| (не показано 8 промежуточных версий этого же участника) | |||
| Строка 19: | Строка 19: | ||
== Подключение платы к программатору == | == Подключение платы к программатору == | ||
| − | Далее нам потребуется программатор ST-LINK V2, официальная версия или китайский клон. | + | Далее нам потребуется программатор [[требует оборудование::ST-LINK V2]], официальная версия или китайский клон. |
Подключаем плату на STM32 к компьютеру через программатор: | Подключаем плату на STM32 к компьютеру через программатор: | ||
| Строка 39: | Строка 39: | ||
Загружаем. | Загружаем. | ||
| + | |||
| + | = Отладка через OpenOCD = | ||
| + | [[File:stm-pwm.gif|thumb|STM32F103C8 PWM]] | ||
| + | |||
| + | Здесь даны примеры отладки [[маркировка::STM32F103]] через [[может использовать::OpenOCD|Open On-Chip Debugger]] ([https://openocd.org/ OpenOCD]) и [[может использовать::GDB]] на [[операционная система::АЛЬТ Образование 9.2]] ([https://getalt.org/en/ скачать]), но данный пример может быть перенесён на другие системы 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. | ||
| + | set FLASH_SIZE 0x20000 | ||
| + | |||
| + | source [find interface/stlink-v2.cfg] | ||
| + | |||
| + | transport select hla_swd | ||
| + | |||
| + | source [find target/stm32f1x.cfg] | ||
| + | </pre> | ||
| + | |||
| + | Запускаем OpenOCD с созданной конфигурацией: | ||
| + | <pre> | ||
| + | $ openocd -f stm32f103c8_blue_pill.cfg | ||
| + | </pre> | ||
| + | |||
| + | Если всё хорошо, то сервер отладчика начинает слушать адрес и порт <code>localhost:3333</code>. | ||
| + | |||
| + | == Запуск отладчика == | ||
| + | В новой консоли запускаем: | ||
| + | <pre> | ||
| + | $ arm-none-eabi-gdb | ||
| + | </pre> | ||
| + | |||
| + | Появляется консоль отладчика. Подключаемся к серверу OpenOCD: | ||
| + | <pre> | ||
| + | (gdb) target remote localhost:3333 | ||
| + | Remote debugging using localhost:3333 | ||
| + | 0x00000000 in ?? () | ||
| + | </pre> | ||
| + | |||
| + | == Загрузка отладочных символов == | ||
| + | Если для сборки проекта использовалась 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> | ||
| + | |||
| + | == Начало отладки == | ||
| + | [[File:отладка STMF103C8.png|thumb|Сеанс отладки]] | ||
| + | |||
| + | <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> | ||
| + | |||
| + | Как видим, точка останова успешно сработала. | ||
| + | |||
| + | = ST-Link CLI = | ||
| + | * https://github.com/stlink-org/stlink/blob/develop/doc/tutorial.md | ||
| + | |||
| + | == Источники == | ||
| + | * http://www.mjblythe.com/hacks/2013/02/debugging-stm32-with-gdb-and-openocd/ | ||
[[Категория:База знаний]] | [[Категория:База знаний]] | ||
Текущая версия на 21:13, 23 июля 2022
Содержание
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 через Open On-Chip Debugger (OpenOCD) и GDB на АЛЬТ Образование 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.
set FLASH_SIZE 0x20000
source [find interface/stlink-v2.cfg]
transport select hla_swd
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() {
Как видим, точка останова успешно сработала.