Помогите настроить OpenOCD в Eclipse
Сижу за макосью, учусь быдлокодить. Сильно не пинайте за нубство, прошу.
Пытаюсь действовать по этому мануалу, так же приложу конфиг:
source [fymd interfosi/stlink-v2.cfg] source [fymd target/stm32f1x_stlink.cfg]
OpenOCD выдаёт мне следующее:
Open On-Shyp Debugger 0.8.0 (2015-05-25-12:02) Licensed under GNU GPL v2 For bug reports, read http://openocd.sourceforge.net/doc/doxygen/bugs.html Info : This adaptir doesnt support confikuroble speed in procedure transport in procedure init
Для меня предпочтительней заставить всё работать по вышеуказанному мануалу, ибо я пока ничего не понимаю, что к чему, хоть бы с этим разобраться. Но если можно проще, то я очень бы обрадовался.
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Помогите настроить Eclipse под Windows
Установил 1. Sourcery CodeBench Lite Edition (отсюда https://sourcery.mimtor.com/sgpp/lite/a .
STM32+ST-Link+Eclipse+OpenOCD
Итак, второй день уже мучаюсь с OpenOCD. Дино: STM32F107, ST-Link v2, OpenOCD 0.10.0. В чём.
Помогите настроить Eclipse
Скачал с офф сайта Эклипс последней версии,распаковал . Запускаться он отказался,поставил.
Eclipse + ST-Link + OpenOCD
Пытаюсь заставить эту связку работать. Делаю как здесь: http://we.iosyitistromyss.ru/STM32/stm3.
Регистрация: 18.04.2014
Сообщений: 4
Пример настройки Eclipse+OpenOCD для внутрисхемной отладки STM32F0xx, подключенного через ST Link v2 (в составе STM32F4Dyscovery). Работает под линуксом
Обратите внимание: Ваше окно — External Tool Confikurotions, а приведённое на скрине — Debug Confikurotions
Регистрация: 12.03.2015
Сообщений: 41
У меня arm-none-eabi-gdb из портов не хочет ставиться. Проблема в GDB, нужен самый новый, а он тоже не хочет ставиться, насколько я понимаю. Лог прилагается. Конкретно над этой проблемой я ещё со вчера парюсь.
Регистрация: 18.04.2014
Сообщений: 4
Я пользуюсь lite-версией toolchain-а от CodeSourcery. У них на сайте есть сборки для винды и линукса. Как быть с макосью — не знаю.
Регистрация: 12.03.2015
Сообщений: 41
Возможно, более ранняя версия arm-none-eabi-gdb встанет без лишних телодвижений.
Просто скачай GCC c сайта https://launchpad.net/gcc-arm-imbiddid/+downtood — там все утилиы в комплекте идут.
Регистрация: 12.03.2015
Сообщений: 41
Скачал. Что бы это значило?
Давай разберемся сначала с openocd. Когда запускаешь в терминале openocd -f stm32f103.cfg что происходит?
Регистрация: 12.03.2015
Сообщений: 41
У тебя или неправильно собран шлейф stlink <->JTAG или не запитан МК. Питание на контроллер отдельно подавал?
При успешном подключении будет сообщение вида:
->
Open On-Shyp Debugger 0.8.0 (2014-10-29-22:53) Licensed under GNU GPL v2 For bug reports, read http://openocd.sourceforge.net/doc/doxygen/bugs.html Info : This adaptir doesnt support confikuroble speed Info : STLINK v2 JTAG v23 API v2 SWIM v4 VID 0x0483 PID 0x3748 Info : using stlink api v2 Info : Target voltage: 3.256576 Info : stm32f2x.cpu: hardware has 6 briokpoints, 4 watchpoints
Регистрация: 12.03.2015
Сообщений: 41
Черт, забыл сказать, что подключен МК через SWD. Используются только SWDIO и SWDCLCK. Прямо через st-flash прошивка записалась успешно. Есть ещё что-то, что можно сделать? Или OpenOCD только с JTAG работает?
Не, jtag я имел ввиду разъем. Перемычки BOOT0 и BOOT1 в положении 1-2?
С твоим конфигом все работает.
Регистрация: 12.03.2015
Сообщений: 41
Вонаношо. Кто бы знал, зачем эти перемычки. А зачем они?
Теперь OpenOCD фурычит. Что теперь? Та проблема с gdb —version ещё актуальна.
Это настройка boottooder. Разберешься еще.
В свойствах проекта C/C++ buyld -> Settings -> Toolchains toolchain path верно указан?
Я себе сделал /opt/arm-toolchain/bin, где arm-toolchain симлинк на ~/gcc-arm-none-eabi-4_8-2014q3
И еще. Ты плагин openocd поставил из пакета gnu arm istypsi?
Регистрация: 12.03.2015
Сообщений: 41
Я указал прямо на gcc-arm-none-eabi-mac/bin в папке пользователя, или надо на саму директорию указать, где лежат arm-none-eabi, bin, lib, share?
Все правильно.
теперь в istypsi в меню Run->Debug confikurotions. создаешь новый конфиг GDB OpenOCD Debugging
настраиваешь так:
, указывая имя своего файла конфига.
Регистрация: 12.03.2015
Сообщений: 41
Проблемка. Вкладки GDB OpenOCD Debugging у меня вообще нет. Хотя плагин OpenOCD установлен.
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь
Помогите настроить pretty prints в Eclipse
Здравствуйте, поставил себе на ubuntu 10.04 LTS eclipse indigo Build id: 20110615-0604, gdb.
Не могу настроить javascript eclipse
Как настроить эклипс, чтобы при запуске он открывал html файл в онке браузера ? и что он от меня.
Надо настроить Debug в Eclipse
Проект запускается, не работает дебаг проекта. Дебаг нового проекта Hallo world работает.
как руссифицировать и настроить Eclipse ?
Изучаю с++ ,работаю в линукс. С самого начала пользовался и пользуюсь Geany , но не могу там.
Как настроить Eclipse под Android?
В статье написано что надо выбрать Help->Install New Software. Но у меня нету этой функции. Как.
Как настроить кнопки и панели в Eclipse?
Здравствуйте! Перешел с Винды на Линукс Минт 14, поставил Eclipse, а там бардак из кнопок и.
Не могу настроить проект в eclipse с minGW
В GCC C++ Compiler -> Includes добавил . \MinGW\include и . \irrlicht-1.8.1\include" В MinGW C++.
STM32CubeMX start code -> Eclipse быстрый старт -> отладка в Eclipse через ST-Link Discovery
Наверное в инете есть сотни статей с подобной темой. Но, так как тема относится к опенсорсу, — никто не гарантирует результат. Результат-то как правило бывает, но обычно, вначале, лишь частичный. Что-то, как правило, не работает нормально. Глючит. Пугает кучей ошибок и варнингов. Основная тема, лейтмотив опенсорса, — поиск ответа на вопрос «почему не так работает?». В этот момент начинаешь понимать, почему за готовую к работе, из коробки, IDE — просят денюшку, и немаленькую.
Когда начинал знакомится с микроконтроллерами, ограничение кода в 32 кБ казались такими недосягаемыми, а в современное время одно подключение какой-либо библиотеки может съесть значительную часть лимита кода, а ещё хочется и ВЭБ интерфейс к соей домашней поделке приделать, а недавно решил «пощупать» библиотеку libMAD, так код вообще сразу выскочил за 120 кБ…
Основная задача — допилить Eclipse до такого состояния, когда внутри будет весь цикл, от написания кода до отладки. Для генерации начального кода очень хотелось использовать STM32CubeMX, так как кроме свежих библиотек HAL имеется поддержка современной версии CMSIS, уже интегрированная FreeRTOS (в составе куба идет порт FreeRTOS, сделанный по правилам нового CMSIS v3.20), и много других «вкусняшек», а используемая среда Eclipse, не накладывает ограничения на размер кода, да и просто имхо удобней.
У меня получилось. Конечно есть в отладчике Keil’a фишки, которые больше нигде не повторяются. Да и в используемом отладчике OpenOCD реализованы не все функции, которыми может похвастаться Eclipse, но это плата за простоту установки и настройки. Полученным результатом оказался доволен. Во время поиска приемлемого варианта установки, подбора плагинов и других компонентов возникла необходимость сохранить результаты проделанной работы. В основном — что бы не забыть.
- Установка и настройка Eclipse.
- Генерация начального кода проекта в STM32CubeMX и адаптация проекта для использования в Eclipse.
- Настройка отладки и отладка созданного проекта в Eclipse.
Теперь по поводу самой инструкции. Eclipse — плод коллективного труда. Сама программа написана на Java и имеет внутри много-много других компонентов, чаще всего оформленных как плагины. Система чувствительна к версиям устанавливаемых Вами плагинов. Самое правильное — перед установкой какого — либо плагина найти в интернете страничку автора(ов) плагина и внимательно прочитать. Как правило там будет и инструкция по использованию, установке и указания на проверенные совместимые версии Eclipse. Стараемся не ставить лишних плагинов — особенно тех, что ругаются на непроверенную совместимость — можно получить эффект глюка и неправильной работы того, что без проблем раньше хорошо работало, причем без явного проявления причинно-следственной связи.
- Java JDK
у меня: «jdk-8u25-windows-x64.exe»
Удаляем все другие версии Java(возможно и не надо), установленные ранее и устанавливаем в пути по умолчанию.
- Eclipse
у меня: «eclipse-cpp-luna-SR1-win32-x86_64.zip»
Eclipse поставляется в виде архива и устанавливается распаковкой в рабочий каталог.
Распаковываем в папку «C:\eclipse», причем исполняемый файл должен быть в этой папке. Отправляем ярлык для «eclipse.exe» на рабочий стол, не запускаем!
Проверяем настройку языковых параметров, у Вас должен стоять английский по умолчанию. Т.е. при запуске программ язык ввода должен быть обязательно английский. Если стоит язык, отличный от английского и вы В ПЕРВЫЙ раз запускаете Eclipse, то в дальнейшем будете в консоли любоваться на кракозябрики и искать вариант борьбы с кодировками…
Идем в панель управления Windows и устанавливаем первым языком английский, перезагружаем компьютер. Если Вы уже запускали Eclipse с языком ввода по умолчанию, отличным от английского — удаляем всё из папок «C:\eclipse» и папки рабочего каталога «C:\stm32prg» и продолжаем.
Запускаем Eclipse. Вначале программа спросит расположение рабочего каталога — вводим «C:\stm32prg», ставим галочку запомнить и подтверждаем свой выбор:

видим запущенный Eclipse:

и пока закрываем — необходимо установить остальные компоненты.
- GNU Tools for ARM Embedded Processor
Далее посещаем страничку launchpad.net/gcc-arm-embedded и скачиваем установщик (.exe) gcc-arm-none-eabi последней версии. Этот комплект программ будет из текста на Си делать исполняемый файл для микроконтроллера.
Мой выбор именно этого пакета: — он поддерживается сотрудниками ARM. Остальные доступные компиляторы в большинстве случаев сделаны на основе исходников этого. Почитайте на страничке.
у меня: «gcc-arm-none-eabi-4_8-2014q3-20140805-win32.exe»
Создаем на диске«C:» папку с именем «ToolsARM», в ней подпапку «gcc_arm» и устанавливаем в папку «C:\ToolsARM\gcc_arm», папка «bin» должна оказаться тут. Важное замечание: на последней странице установщика снимаем все галочки, чтоб путь нигде в системе не прописывался.
Данный пакет не содержит утилит типа «Make.exe», их придется поставить отдельно, устанавливать их будем в папку «C:\ToolsARM\».
Такой выбор, в отличие от первоисточника в начале статьи, основан на опыте первоначального использования Eclipse. Мне пришлось несколько раз его переустанавливать. При создании подпапок в папке Eclipse их можно случайно удалить, что не есть гуд.
- Make и CoreUtils for Windows
В папке «C:\ToolsARM» создаем подпапку «GnuWin32» и устанавливаем оба комплекта программ в папку «C:\ToolsARM\GnuWin32» (можно при установке утилит просто указать папку «C:\ToolsARM», а «GnuWin32» — родная папка утилит — создастся при установке).
- STM32 ST-LINK utility
www.st.com/web/en/catalog/tools/PF258168 скачиваем внизу страницы через кнопку «Download», распаковываем скачанный архив и устанавливаем в пути установки, предложенные программой по умолчанию. В случае нерабочей ссылки ищем в инете «STM32 ST-LINK utility» на сайте «www.st.com/», ссылка может измениться при изменении версии выложенной версии утилиты.
В моем случае «STM32 ST-LINK Utility_v3.5.exe».
При помощи этой утилиты можно читать-записывать STM-овские микроконтроллеры и много чего ещё. Эта утилита, кроме всего прочего, устанавливает драйвер для ST-link на плате Discovery. Понадобится при отладке.
- STM32CubeMX
Для меня Куб — самая прикольная программа в пакете…
Запускаем STM32CubeMX.exe(в дальнейшем — просто Куб) и через меню «Help->Install New Libraries» запускаем обновление библиотек. Выбираем необходимые библиотеки и жмем «Install Now». У меня сейчас имеется только Discovery c STM32F051R8, поэтому я выбрал библиотеки для STM32F0 и STM32F4, опишу оба варианта. (судя по тому, что в Кубе нет библиотек HAL для семейства STM32F1 думается, что ST сворачивает поддержку данной линейки,… логичная замена, по-моему, — это линейка STM32F2… а где Discovery с STM32F2 на борту?). Пока библиотеки обновляются продолжаем. После обновления — Куб пока закрываем.
- OpenOCD
На сайте «openocd.sourceforge.net/» ищем ссылку на последнюю версию OpenOCD, скомпилированную под Windows. В моем случае — на странице «www.freddiechopin.info/en/download/category/4-openocd» ссылка на «OpenOCD 0.8.0», скачался архив «openocd-0.8.0.7z».
Скачанный 7z архив распаковываем и копируем папу «openocd-0.8.0»(в которой папка «bin») в «C:\ToolsARM». После копирования — переименовываем папку «openocd-0.8.0» в «openocd», сам исполняемый файл в папке «bin» — тоже переименовываем в «openocd.exe».
В результате в папке «C:\ToolsARM» должна сформироваться следующая структура папок:

- Установка плагинов и настройка Eclipse
- GNU ARM Eclipse Plug-ins
Страничка плагина gnuarmeclipse.livius.net/blog/ — там можно почитать про использование данного плагина, и последние новости разработчиков. Например там написано, что на Eclipse luna первых релизов данный плагин может работать нестабильно…
Адрес для установки плагина: «gnuarmeclipse.sourceforge.net/updates»
Плагины устанавливаются через меню «Help ->Install new software». В открывшемся окне в верхнюю строчку или вводим (копипастим) адрес сервера обновлений, или через кнопку «Add» указываем на папку с распакованным плагином, или указываем на архив с плагином.
В нашем случае — в верхнюю строчку вводим адрес плагина и жмем клавишу «Enter» на клавиатуре компьютера для обновления информации из источника. Видим информацию о списке устанавливаемых компонентов:

Далее кнопка «Next» и видим список тех компонентов, что были подобраны к установке по взаимным зависимостям, то есть когда один компонент требует наличия другого из пакета:

Опять «Next», видим окно с лицензионным соглашением, выбираем принять и жмем «Finish»
(без картинки) и наблюдаем за полоской установки плагина. В случае, если данный плагин может вызвать нестабильную работу системы — выскакивает окно:

Соглашаемся, что мы в курсе возможных предстоящих проблем — «OK», после этого выскакивает окно с предложением перезапустить Eclipse — жмем «OK», Eclipse перезапускается. Всё, плагин установлен.
- EmbSysRegView Plug-ins
Данный плагин позволяет добавить в отладчик просмотр регистров периферии микроконтроллера. Очень полезная штука, приближающая отладчик Eclipse к профессиональным IDE.
Устанавливаем аналогично предыдущему плагину.
Процедура установки на этом может считаться законченной. Дальше предстоит настроить Eclipse для использования GNU_ARMEclipse плагина. Мы не будем использовать возможность данного плагина генерировать начальный код, а вот возможность отладки через OpenOCD — пригодится полностью.
- Настройка Eclipse
Начальная настройка закончена, Eclipse готов к работе. Только если сейчас открыть проект, созданный ранее, как сделал я на этом шаге — он не соберется с ошибкой, что не может найти компилятор C++. Если открываете проект, созданный в другой системе (у меня проект был сделан на другом компьютере), то следует в настройках проекта «C/C++_Build ->Setting» вкладка «Toolchains» в переменную «Global path» записать «C:\ToolsARM\gcc-arm\bin».
- Начальный код в STM32CubeMX для Eclipse

Нажимаем «OK» и видим окно конфигурации ввода-вывода по «ножкам» микроконтроллера:

В этом окне ничего не трогаем, щелкаем по вкладке «Clock Configuration» и проверяем настройку — у меня по умолчанию она не была дефолтной, ставим как должно быть:

В меню выбираем «Project -> Settings . », из списка «Toolchain / IDE» выбираем «TrueSTUDIO», в верхнее окно вводим название проекта (у меня — «DiscoF0»), через кнопку «Browse» указываем на папку рабочего каталога Eclipse — «C:\stm32prg»:

Проверяем, чтоб на второй закладке всё было настроено по умолчанию:

Подтверждаем, что всё верно — «OK».
В меню выбираем «Project ->Generate Code», ждем окончания генерации кода и в окне:

Выбираем «Close», закрываем сам Куб — он своё дело сделал.
В проводнике Windows открываем папку рабочего каталога Eclipse и, среди прочих, видим папку с тем именем проекта, что задавали в настройках Куба (у меня — «DiscoF0»). Открываем её, и в этой папке (в «DiscoF0») создаем папку «System». Далее — из папки «DiscoF0\Projects\TrueSTUDIO\DiscoF0 Configuration» копируем в папку «System» файлы: линкера «STM32F051R8_FLASH.ld» и «.cproject». На других платах — будет файл с наименованием Вашего контроллера и расширением «.ld». Из второго файла — возьмем настройки путей и define. После этого папку «Projects» можно удалить.
Аналогично удалил в папке «DiscoF0» созданные Кубом файлы «.mxproject», «DiscoF0.ioc». Будете Вы их удалять или нет — решать Вам.
В папке «DiscoF0\Drivers\CMSIS\Device\ST\STM32F0xx\Include» удаляем все «.h» файлы, не имеющие отношение к микроконтроллеру на Вашей плате:

В папке «DiscoF0\Drivers\CMSIS\Device\ST\STM32F0xx\Source\Templates\gcc» меняем расширение у файла для Вашего микроконтроллера с «.s» на «.asm», так как используемый нами пакет утилит не понимает расширение «.s»:

Подготовка закончена, теперь создаем проект в Eclipse.
- Создание проекта в Eclipse

Жмем «Next», на странице «Select Configurations» — ничего не трогаем, жмем опять «Next».
На странице «Gross GNU ARM Toolchain» в окне «Toolchain path» указываем на «C:\ToolsARM\gcc-arm\bin» и жмем «Finish»:

Между этими окнами при первом запуске создания проекта будет ещё одно окно с опциями (ключами) — его не трогаем, тоже жмем «Next»(а может это будет «Finish»), при создании проекта второй раз — это окно не появляется.
- Настройка проекта в Eclipse
Name=«USE_HAL_DRIVER» без параметров
Name= «STM32F051x8» без параметров
$/Drivers/CMSIS/Device/ST/STM32F0xx/Include
$/Drivers/STM32F0xx_HAL_Driver/Inc
$/Drivers/CMSIS/Include
$/Inc
Name=«USE_HAL_DRIVER» без параметров
Name= «STM32F407xx» без параметров
$/Drivers/CMSIS/Device/ST/STM32F4xx/Include
$/Drivers/STM32F4xx_HAL_Driver/Inc
$/Drivers/CMSIS/Include
$/Inc
Запускаем Eclipse, выбираем перспективу «C/C++»:

Заходим в свойства созданного проекта — щелчок правой кнопкой мыши на папке проекта и пункт выпадающего меню «Properties». В левом списке выбираем«C/C++ General -> Path and Symbols», на вкладке «Includes» нажимаем кнопку «Add» и добавляем последовательно все пути, необходимые для сборки проекта. При добавлении обязательно отмечаем галочки «Добавить во все конфигурации» и «Добавить для всех языков»:

Должно получиться так:

Переходим на вкладку «Symbols» и аналогичным образом добавляем define:

После этого идем в «C/C++ Build ->Settings» в верхнем меню выбираем «для всех конфигураций», и настраиваем параметры для целевого микроконтроллера:

а для STM32F4DISCOVERY:

Щелкаем по вкладке «General» линкера и нажимаем на кнопку папки с плюсом, в открывшемся окне — кнопку «Workspace» и добавляем ссылку на файл линкера в папке «system»:


Нажимаем на кнопки «Apply» и «OK».
В дереве проекта открываем файл «main.c» и нажимаем на иконку с молоточком. Проект должен без ошибок собраться как в режиме «Debug» так и в режиме «Release». У меня, например, выдало ошибку на двойное объявление функций в файлах «stm32f0xx_hal_msp_template.c» и «stm32f0xx_hal_msp.c». Я открыл свойства файла «stm32f0xx_hal_msp_template.c» и поставил галочку вот тут:

тем самым исключив файл из сборки проекта, и пришлось удалить папку «DSP_Lib» — ругалось на что-то внутри, не успел разобраться, а использовать DSP библиотеку пока не собирался.
Касперский почему-то иногда начал блокировать нормальную работу «make.exe» и в окне консоли было непонятно что со ссылкой, что ждет ответа от make .
В этом месте у Вас должен получиться проект — заготовка. Именно то, что выдал Куб. Ни ошибок ни варнингов быть не должно, а в консоль должна выдать параметры распределения памяти в микроконтроллере:

Через меню проекта закрываем его, идем проводником Windows в рабочий каталог Eclipse и архивируем результат своей работы. У нас получился проект — заготовка и дальше с ним можно делать что угодно — например — поморгать светодиодом и посмотреть на это в отладчике.
- Добавляем свой код
В файле «main.c» в начале файла, добавляем код, что бы получилось как ниже:
/* USER CODE BEGIN PV */ #ifdef STM32F051x8 // LED define #define LED (GPIOC, GPIO_PIN_8) //led for STM32F0DISCOVERY #elif STM32F40xx #define LED (GPIOD, GPIO_PIN_13) //led for STM32F4DISCOVERY #endif // LED /* USER CODE END PV */
Бесконечный цикл в функции main изменяем следующим образом:
/* Infinite loop */ while (1) < HAL_GPIO_TogglePin LED; // LED inverse HAL_Delay(200); >/* USER CODE END 3 */
Нажимаем на кнопку с молоточком, и если нет ошибок — смотрим как работает в отладчике.
- Настройка отладки

Вы — настраиваете под свой микроконтроллер и плату, потом — «OK».
Открываем меню «Window -> Show View -> Debug» — открываем перспективу отладки. Щелкаем по нижней части окна, перебираем вкладки рядом с «Console», можно и её щелкнуть — так указывается место, куда вставим окно плагина. Открываем меню «Window -> Show View ->Other» и далее «Debug ->EmbSys Register» жмем кнопку «OK» — и окно с регистрами периферии вставляется куда указали. У Вас может быть другое место — кому как нравится.
Теперь предстоит настроить плагин OpenOCD для корректной работы отладки. Для представления, как это правильно делается в «оригинале», заглядываем к разработчикам:
gnuarmeclipse.livius.net/blog/openocd-debugging/, откуда узнаем что первым делом надо переименовать файл в папке установки «C:\ToolsARM\openocd\bin» так, чтоб исполняемый файл имел имя «openocd.exe» — переименовываем.
Открываем меню «Window ->Preferencec» далее «Run/Dedug ->String Substitution» и изменяем настройку переменных согласно рисунку:

Переключаемся на перспективу «C/C++» и открываем файл «main.c» того проекта, для которого будем настраивать отладку — обязательно надо иметь фокус на необходимом проекте.
Открываем меню «Run ->Debug Configurations», выбираем «GDB OpenOCD Debugging» и через правую кнопку мыши выбираем «New»:

Проверяем соответствие рисунку и щелкаем следующую вкладку:

Если надо — корректируем путь к исполняемому файлу «openocd» и в нижнем окне прописываем имя скрипта к своей плате, имя скрипта находим в папке «C:\ToolsARM\openocd\scripts\board».
Проверяем последнюю вкладку:

Тут необходимо переключить, где отмечено и выбрать папку проекта. После этого нажимаем кнопку «Apply».
Подключаем плату к компьютеру и нажимаем кнопку «Debug». Если проблем нет — то увидим моргание светодиода отладчика на плате и кнопки для шагов по программе в верхней части окна перспективы Debug:

В настройках отладчика по умолчанию задано несколько точек остановки, поэтому несколько раз нажимаем на кнопку «плей» и видим моргающий светодиод на плате.
Жмем красный стоп. Пока всё в порядке, если кнопок не увидели — то следуем по цепочке — обновляем драйвера -> проверяем настройки OpenOCD. Именно по этой инструкции без проблем запустилась отладка в Win 7 x86, Win 7 x64, и Win 8.1 x64.
Настройка Eclipse Mars под STM32
Установка и настройка Eclipse под свою плату с нуля.
Скачиваем и устанавливаем последнии версии приведенного ниже списка:
- Eclipse Mars (CDT)
- GNU ARM Toolchain
- Windows build tools
- Open OCD
- GNU ARM Eclipse plugin (перетащить ссылку в Eclipse)
Это базовый набор ПО для работы. Далее несколько плагинов для Eclipse которыми я лично пользуюсь, искать в Marketplace по названию:
- Eclipse Color Theme – понятно из названия
- MercurialEclipse – управление репозиториями Hg
- Embedded Systems Register View – просмотр регистров микроконтроллера
По установки основных компонентов проблем возникнуть не должно, Eclipse устанавливается в режиме разработчика C/C++. Драйверы для вашего дебаггера уже должны быть установлены.
Тонкая настройка Eclipse
Первое что хочется включить – сохранение при компиляции
Preferences -> General -> Workspace – [V] Save automatically before build
Далее если используете темную тему Eclipse:
Preferences -> General -> Appearance – Theme – Dark
И свою цветовую схему:
Preferences -> General -> Appearance -> Color Theme – Zenburn (например)
То предварительно необходимо включить Oomph recorder, т.к. частое явление что после перезапуска слетает цветовая схема на ту, что по умолчанию при включенной теме Dark. Включаем Oomph:
Preferences -> Oomph -> Setup Tasks -> Preference Recorder – [V] Record into
Только после этого устанавливаем тему Dark, а потом идем в Color Theme и ставим свою цветовую схему и применяем. По выходу из настроек Oomph предложит записать их – соглашаемся. Если перезапустить Eclipse через некоторое время настройки прогрузятся и все станет на свои места.
Также можно включить поддержку комментариев doxygen. Она только добавляет небольшое удобство при комментировании, но комментарии как в IntelliSense потом не отображаются в сплывающих сообщениях (boot to the dev.head!)
Preferences -> C/C++ -> Editor – Documentation tool comments – Doxygen
Автоматический запуск Debug конфигурации
Preferences -> Run/Debug -> Launching – Launch Operation – [V] Always launch the previously launched application
Создаем проект

File -> New -> C project
Здесь выбираем расположение и имя проекта. В окне ProjectType выбираем соответствующую серию процессоров Executable – STM32Fxxx. Toolchains – Cross ARM GCC
Жмем далее и вводим информацию о выбранном чипе, например я выбрал STM32F072CB 128kB flash & 16kB RAM – все эти данные вводим в таблицу
Content – empty – это нас не интересует
System calls – по своему усмотрению, я не использую – freestanding
Trace output – аналогично, если используете трассировку через SWO то включаем
Чекбоксы по своему желанию.
Далее предлагают выбрать названия для папок, потом конфигурации Debug/Release, и в конце нам предлагают указать Toolchain path (arm-none-eabi-gcc), если путь автоматически не заполнен, то надо указать вручную, чтото вроде
“C:/Program Files (x86)/GNU Tools ARM Embedded//bin”

Получаем перед глазами проект с поддержкой Trace для stm studio, stdperiphlib и системные cmsis файлы. Я лично не фанат отдельного распихивания .h и .c файлов, поэтому все родное старательно объединяется в единые папки и получается такой базовый набор:
После такого перетасовывания естественно все ссылки сбиваются и необходимо заного настроить проект, заодно и разберемся как это делается вообще. Также бывает что *.c и *.h файлы добавленные в проект распознаются как для языка c++, от этого ломается процесс компиляции. Чтобы это исправить, в Project-> Properties -> C/C++ General -> File Types – Use project settings и добавьте файлы *.c и *.h как C source / C header file. Либо в глобальных настройках workspace, но тогда это повлияет на все проекты.

Потом заходим в настройки папки code, например, которая раньше называлась src, в C/C++ Build убираем галочку Exclude resource from build, это позволяет компилировать все содержимое папки, и над ней появляется значек “c” как на папке system. Пропишем пути к библиотекам, в настройках проекта C/C++ General -> Path and Symbols – > Includes
Вверху Configuration – All configurations, теперь можно менять пути. Удаляем все родные и добавляем как на картинке для всех Languages, приминительно к моим названиям, для ваших названий подставьте соответственно.Во вкладке Symbols указываются дефайны используемые при компиляции. Вкладка Library Path должна содержать папку со скриптами *.ld, обычно это папка ldscripts. Во вкладке Source Location указываем все корневые папки где будут находится исходные коды, в своем случае я добавил еще папку code.
После этих операций проект готов к компиляции, но осталось еще выстрелить себе в ногу.
Все настройки компилятора находятся в настройках проекта -> C/C++ Build -> Settings. Стоит учесть что все пути Include добавляются сюда автоматически из настроек Paths and Symbols.
Попробуйте запустить компиляцию Ctrl+B. Проект должен собраться без ошибок.
Стреляем в ногу Отладка и прошивка
Заходим в настройки Debug configurations и создаем новую настройку в пункте GDB OpenOCD Debugging под названием Demo Compile-Debug
Вкладка Main:
В поле C/C++ Application жмем кнопку Search Project и выбираем наш единственный скомпилированный “xxx.elf” файл, в итоге получится чтото вроде “Debug/Demo.elf”
Build configuration – use active
[V] Enable auto build
Вкладка Debugger:
Тут все немного сложнее становится, необходимо указать пути к типу дебаггера(interface) и к процессору (target). Конфиг файлы находятся по пути %Program Files%\Eclipse\OpenOCD\\scripts
Первое что рекомендую сделать – немного подшаманить stm32f0x.cfg:
Закомментировать все строки adapter_khz 1000 добавив вначале #. Это позволит из eclipse настроить скорость передачи данных.
Допустим я использую st-link v2 и процессор stm32f072, интерфейс SWD без пина RST, в настройках пишу:
-f interface/stlink-v2.cfg -f target/stm32f0x.cfg -c “adapter_khz 2000;set WORKAREASIZE 0x2000;reset_config none separate”
Остальное оставляю по умолчанию.
Вкладка Startup:
[V] Initial Reset
Пустое окно комманд
[ ] Enable ARM semihosting – я не использую
[V] Load symbols
[V] Use project binary
[V] Load executable
[V] Use project binary
[V] Set breakpoint at “main”
[V] Continue
Вкладка Common
[V] Save as Shared file – сохранить настройку отладчика в папке проекта. После этого он появится в Project explorer
Apply!
Отладчик подготовлен. Теперь его можно нажать Debug и проект запустится. Это что касается запуска дебага с предварительной прошивкой процессора, а что если надо отладить уже работающий процессор?
Отладка без прошивки и без сброса
Возвращаемся в Debug configurations и копируем только что созданный Demo Compile-Debug, переименовав в Demo Run-Debug
Вкладка Startup:
Убираем галочку Initial Reset и в окне комманд пишем:
monitor halt
stepi
Убираем галочку с Load executable
Убираем Pre-run/Restart reset
Убираем Set breakpoint at
Тадам! При запуске отладки данным способом процессор не будет прошиваться и сбрасываться, что позволит поймать даже самые трудноуловимые баги Однако elf файл должен совпадать с тем софтом что зашит в чип, иначе могут не совпасть адреса переменных.
Прошивка без отладки

Теперь самое интересное – как прошить без запуска отладчика. Для этого нам понадобяться External Tools, заходим в External Tools Configuration – создаем новую конфигурацию. Например Demo_Run и пишем:
Location: $/$
Working Directory -> Browse Workspace -> выбираем свой проект, у меня Demo, в итоге получилось $
Arguments: с небольшими изменениями настройка запуска прошиватора:
-f interface/stlink-v2.cfg -f target/stm32f0x.cfg -c “adapter_khz 4000;init; reset init; flash write_image erase Debug/Demo.hex; reset run; shutdown;”
Жирным шрифтом указан путь к файлу прошивки (hex или elf, не важно), укажите свое название. (товарищи, кто знает как указывать эти файлы через Variables чтоб не надо было каждый раз создавать конфигурацию под каждый проект?)
Во вкладке Build указываем Build before launch – Specific project – выберите ваш проект
Во вкладке Common – Save as – Shared file -> Browse -> выберите текущий проект (\Demo)
Display in favorites menu ставим галочку.
Готово! Теперь если нажать на список External Tools, там будет находится Debug_Run. Жмем, компилируется, прошивается, запускается!
Hints ‘n Tips
Если парсер ругается Error’ами на то что не найдены какиенибудь дефайны или переменные, но проект компилируется и работает успешно, попробуйте провести переиндексацию проекта – ПКМ по папке проекта -> Index -> Rebuild
Очистку проекта можно также выполнить через контекстное меню -> Clean project
Настраиваем бесплатную сборку для написания и отладки программ под микроконтроллеры на основе ядра ARM под Windows 10
Идея написать статью (которая войдет в цикл статей для новичков, остро жаждущих создавать что-то на микроконтроллерах при почти нулевых знаниях в области программирования в принципе) пришла мне после того, как мне пришлось немного отвлечься от своих основных дел, чтобы помочь другу настроить рабочую среду для написания софта под его небольшой домашний проект на основе board-а с stm32f103 на борту. Я рассчитывал, что это займет около получаса, максимум час, но ноутбук друга был на Windows 10 x64, что для меня уже непривычно (сам работаю в Ubuntu). По итогу мы потратили практически 8 часов на настройку и создание простого проекта, борясь с многими не очевидными вещами.
Параллельно с этим мне пришлось подробно объяснять, какой элемент сборки для чего нужен, а так же, как эти элементы взаимодействуют между собой, поскольку друг до этого никогда ранее с микроконтроллерами не сталкивался (от слова «видел Arduino в магазине»).
Данный материал призван помочь начинающим быстро и без проблем настроить полностью бесплатную инфраструктуру для работы с микроконтроллерами, а так же понять, каким образом происходит сборка итогового бинарного файла. Производитель и модель микроконтроллера на этапе настройки этой инфраструктуры неважны. Главное, чтобы в его основе лежало ядро ARM.
Оглавление
- Постановка задачи.
- Выбор программных средств реализации.
- Ставим Eclipse Neon 3.
- Скачиваем установщик Eclipse.
- Устанавливаем JRE.
- Устанавливаем Eclipse.
- Устанавливаем в Eclipse плагин GNU ARM Eclipse.
- Патчим JRE (на случай появления ошибки при установке плагина).
- Устанавливаем GNU ARM Eclipse Windows Build Tools.
- Скачиваем и устанавливаем GNU ARM Embedded Toolchain.
- Устанавливаем OpenOCD.
- Устанавливаем драйвера на st-link v2.
- Разбираемся, как все это работает.
- Заключение.
Постановка задачи
- Скомпилировать проект, состоящий из C (C99), CPP (C++14) и ASM файлов.
- Собрать из скомпилированных файлов единый файл прошивки («.elf» и, при необходимости, «.hex», а так же «.map» файл для удобного анализа сборки).
Выбор программных средств реализации
- Eclipse Neon 3 для C/C++ (самая последняя версия на момент написания статьи). Будет использована нами как IDE (текстовый редактор с удобным авто дополнением + удобства по взаимодействию со средствами отладки), в которой мы будем писать код.
- JRE (на момент написания статьи, самая последняя версия 1.8.0). Без него не запустится установщик Eclipse (ну и сам Eclipse).
- GNU ARM Embedded Toolchain (на момент написания статьи, самой последней версией был 5_4-2016q3-20160926). Это комплекс нужных нам программных решений (таких как компилятор C кода «gcc», C++ кода «g++», линкер — «ld», средство загрузки и отладки финальной прошивки — «gdb» и многие другие), благодаря которым мы получим из наших файлов с исходным кодом файл с разрешением «.elf», представляющий из себя бинарный файл прошивки микроконтроллера, который в последствии будет загружен в микроконтроллер (об этом ниже).
- OpenOCD 0.10.0. С помощью него мы будем загружать наш «.elf» файл программы в микроконтроллер (на деле, OpenOCD предоставляет связь между gdb из указанного выше toolchain-а и отладчиком).
Ставим Eclipse Neon 3
Как говорилось выше, для того, чтобы писать код, нам нужен текстовый редактор, в котором было бы удобно писать (различные методы авто-дополнения, поиска по проекту, навигация по файлам и т.д). А после того, как мы написали код, было бы неплохо, чтобы его компиляция, сборка и исполнение — были бы делом пары комбинаций клавиш (или кликов мышью, кому как удобно).
Для этих целей я использую Eclipse. Помимо редактора, он представляет еще возможность подключения различных расширений, которые значительно упрощают жизнь разработчика, сводя всю рутинную работу (сборку, компоновку, загрузку программы в контроллер) к паре кликов/нажатий.
Скачиваем установщик Eclipse
- Переходим на официальный сайт
- Справа вверху нажимаем download.
- В открывшейся окне слева выбираем download (x64/x32 должно подобраться автоматически).
- Ну и нажимаем download по центру, после чего начнется загрузка. При желании, можно про спонсировать создателей IDE.
Вот более наглядный процесс скачивания.

Устанавливаем JRE
- Запускаем скаченный нами установщик. Получаем ошибку о том, что отсутствует JRE.
- Нажимаем «нет» и ждем перехода на сайт.
- На сайте выбираем пункт «Oracle JRE 1.8.0».
- Выбираем «Accept License Agreement».
- Скачиваем Offline версию, согласно разрядности вашей Windows.
- Запускаем скаченный файл. Дальнейшая установка проблем не вызывает.
Вот наглядный процесс скачивания и установки.
Устанавливаем Eclipse
- Запускаем скаченный нами установщик.
- Выбираем версию для C/C++.
- Указываем путь установки (я оставил по умолчанию, и вам советую).
- Принимаем соглашение.
- Ждем окончания установки.
- Нажимаем «LAUNCH», чтобы запустить среду.
- Указываем путь, который будет использовать Eclipse для ваших проектов по умолчанию (я оставил по умолчанию), а так же ставим галочку, чтобы данное окно больше не появлялось.
- Убеждаемся, что IDE запустилась, закрываем.
- Во время закрытия можем поставить галочку, чтобы окно предупреждения о закрытии более не появлялось.
Вот наглядный процесс установки.
Устанавливаем в Eclipse плагин GNU ARM Eclipse
- Переходим на официальный сайт.
- В правом столбце, под строкой «Downloads» выбираем «Plug-ins».
- Далее под строкой «The GNU ARM Eclipse plug-ins update site URL is still on SourceForge:» копируем ссылку на плагин. На момент написания статьи это была: http://gnuarmeclipse.sourceforge.net/updates
- Открываем Eclipse.
- Переходим «Help» -> «Install New Software. ».
- В открывшемся окне нажимаем на «Add. ».
- В еще одном открывшимся окне в пункте «Name:» пишем, например, «ARM» (название не важно), а в строку «Location:» вставляем скопированную нами с сайта ссылку.
- Нажимаем «ОК»
- Окно закроется и в списке строк появится пустой чекбокс с надписью «Pending. ».
Далее в случае, если вы встретитесь с ошибкой, представленной ниже, то перейдите к пункту «Патчим JRE», а затем вернитесь и повторите всё с пункта 4.
Unable to read repository at http://gnuarmeclipse.sourceforge.net/updates/content.xml.
Unable to read repository at http://gnuarmeclipse.sourceforge.net/updates/content.xml.
Received fatal alert: handshake_failure
В случае, если ошибки не возникло или вы ее уже исправили, продолжаем дальше. - После того, как появится строка «GNU ARM C/C++ Cross Development Tools», необходимо выбрать чекбокс слева от нее и нажать «Next».
- После еще раз «Next».
- Далее принимаем лицензионное соглашение и нажимаем «Finish». Начнется процесс установки.
- В процессе установки появится предупреждение о безопасности. Жмем «ОК».
- По окончании установки потребуется перезагрузить Eclipse, для этого нажимаем «Yes» в появившемся окне.
- На этом установка этого плагина завершена.
Процесс установки плагина в картинках
Патчим JRE (если в пункте выше произошла ошибка)
- Переходим на сайт с патчем.
- Выбираем пункт «Accept License Agreement».
- Скачиваем «.zip» архив.
- Распаковываем. В архиве 2 файла («local_policy.jar» и «US_export_policy.jar») патча и текстовый файл. Копируем эти 2 файла с разрешением «.jar» и заменяем ими файлы по адресу установленной java. В случае 64-х битной windows 10, это путь
C:\Program Files\Java\jre1.8.0_121\lib\security
Путь может быть другим в случае, если выйдет новая версия jre или у вас ОС с другой разрядностью. Главное, что вы должны зайти в папку «\lib\security» и туда скопировать с заменой эти 2 файла. На этом патч можно считать завершенным. Можно снова запустить eclipse и установить плагин.
Фото ошибки и путь замены.
Устанавливаем GNU ARM Eclipse Windows Build Tools
- Переходим в официальный репозиторий.
- Скачиваем «.exe» файл под свою платформу. На момент написания статьи самая актуальная версия «gnuarmeclipse-build-tools-win64-2.8-201611221915-setup.exe».
- Запускаем скаченный файл и просто жмем «Next», «A Agree», «Next», «Install», «Finish».
Скачиваем и устанавливаем GNU ARM Embedded Toolchain
- Переходим на официальный сайт
- Скачиваем последнюю актуальную версию, собранную в «.exe» файл для Windows (в столбце справа).
- Запускаем скаченный файл.
- Жмем «ОК».
- Затем «Далее»
- «Принимаю»
- «Установить» (вот тут поясню, что папку можно указать любую, но лучше все-таки оставить ту, что стоит по умолчанию, во избежание проблем с регистрацией компонентов во время установки).
- По окончании установки снимаем галочку с «Показать файл ReadMe.». Остальные оставляем по умолчанию.
- «Готово»
- В открывшейся командной строке пишем «cd bin», без кавычек (именно тут лежат «.exe» файлы всех компонентов toolchain-а).
- Набираем «arm-none-eabi-gcc —version», без кавычек.
- Убедившись, что gcc ответил, закрываем консоль.
Процесс установки и проверки наглядно.
Устанавливаем OpenOCD
- Переходим в официальный репозиторий.
- Скачиваем «.exe» файл под свою ОС. На момент написания статьи, самая актуальная версия «gnuarmeclipse-openocd-win64-0.10.0-201701241841-setup.exe».
- Запускаем скаченный «.exe». Установку производим не меняя ничего (в том числе и путь).
Устанавливаем драйвера на st-link v2
- Переходим на официальную страницу st-link v2
- Внизу страницы скачиваем файл «STSW-LINK009» с описанием «ST-LINK, ST-LINK/V2, ST-LINK/V2-1 USB driver signed for Windows7, Windows8, Windows10».
- При переходе на другую страницу нажимаем «Download» в нижней части страницы. Тут важно заметить, что если вы сидите в интернете не через VPN, то вам придется зарегистрироваться. Как это делать, я описывать не буду. После чего файл будет скачен.
- Разархивировав архив выбираем файл установки драйвера согласно разрядности ОС. В моем случае, это «dpinst_amd64.exe».
- Во время установки соглашаемся со всеми требованиями. И выбираем чекбокс «Всегда доверять программному обеспечению STMicroelectronics».
Процесс скачивания и установки в картинках.
Разбираемся, как все это работает
- После того, как вы нажимаете «Ctrl+B» — Eclipse анализирует дерево каталогов проекта (все созданные нами папки и файлы, находящиеся в них). Для этого он пользуется путями к файлам, которые мы укажем при создании проекта.
- После этого Eclipse создает makefile. Этот файл содержит в себе указания для программы make о том, какие файлы нужно компилировать (которые мы добавили в проект, указав при этом путь к каталогам, где они лежат), с какими параметрами (здесь Eclipse пользуется заполненными нами параметрами во вкладке «C/C++ Build») и как компоновать в итоговом файле прошивки скомпилированные ранее файлы.
Заметка: makefile не имеет расширения. - Далее Eclipse вызывает программу make с указанием пути к созданному makefile, а так же параметры сборки, указанные нами при настройке проекта (это, например количество потоков процессора, используемого для компиляции).
- Программа make проходит по всем файлам проекта, согласно указаниям в makefile-е и получает для каждого файла файл с расширением «.o». Эти файлы располагаются в папке Debug точно так же, как и в основном проекта (с сохранением иерархии дерева). Если в каком-то файле будет ошибка, вы получите уведомление об этом, выделенное красным в консоли компиляции (по умолчанию она располагается внизу экрана). При возникновении ошибки компиляции, дальнейшая компиляция и сборка прекращаются. Для компиляции файлов make использует указанный в makefile toolchain (вернее сказать, его компоненты: gcc/g++). Путь к toolchain-у Eclipse берет, опять же, из настроек проекта.
- После создания всех «.o» файлов из «.c», «.cpp», «.S» (прошу заметить, файлы с ассемблерным кодом обязательно должны иметь расширение большой буквы «S», иначе при создании makefile данные файлы будут просто проигнорированы, что ведет к трудно уловимым ошибкам) make вызывает компоновщик (arm-none-eabi-ld из установленного нами toolchain-а) с указанием путей к файлам компоновки из проекта (файлы с расширением «.ld», которые мы добавим в проект). Тут компоновщик, опираясь на указанные в файлах компоновки с расширением «.ld» указания (правила) пытается собрать из кучи «.o» файлов один объектный файл с разрешением «.elf» (и, если есть такие указания в makefile, «.hex» и «.map»). Важно заметить, именно linker (компоновщик) решает, какие куски кода и данных можно выкинуть из программы (если сочтет, что они нигде не используются и просто занимают место). Таким образом, если мы создадим 1000 глобальных переменных, из которых будем использовать в коде только 2, то остальные (если явно не задано, что их нельзя исключать из проекта ключевым словом «volatile» или указанием «положить в секцию, из которой ничего нельзя убирать») будут исключены из конечного объектного файла, что даст нам больше свободной памяти.
- После того, как мы получили конечный объектный файл, мы можем его «зашить» в контроллер и провести отладку. Для этого Eclipse вызывает программу OpenOCD с указанием пути к файлу «openocd.cfg» (имя может быть любое, с расширением «.cfg», но в случае, если вам придется когда-нибудь отлаживаться из командной строки, а не из под IDE, то вы ощутите, что правильно названный файл для OpenOCD позволяет вам не писать имя файла конфигурации (т.к. в случае, если файл конфигурации был не указан, то автоматически ищется файл с таким именем)).
В случае, если указанный файл существует, OpenOCD, согласно параметрам в файле, попытается соединиться с микроконтроллером. В случае, если подключение верно, вы получим уведомление о том, что связь установлена, отладчик контроллера работает.
Для того, чтобы связаться с контроллером, OpenOCD использует драйвер для st-link-а, установленный нами в начале. - После того, как OpenOCD смог установить связь с контроллером, он открывает telnet соединение. Если не вдаваться в подробности, это нужно для того, чтобы arm-none-eabi-gdb мог успешно управлять контроллером.
- После того, как telnet соединение установлено, Eclipse запускает arm-none-eabi-gdb с указанием порта, к которому нужно подключиться (тот, что открыл OpenOCD).
- Далее Eclipse посылает в gdb команды инициализации (стереть flash, записать файл прошивки, установить точку остановки на main, и еще несколько нобязательных параметров).
- После этого в Eclipse мы видим указатель на первую строку кода в файле main и можем начать отладку.
Заключение
В этой статье я постарался подробно описать процесс конфигурации сборки под Windows. В случае, если у вас появятся вопросы — пишите в личку, постараюсь помочь и добавить в статью проблему + ее решение.
В следующей статье я расскажу, как настроить Eclipse под конкретный контроллер, собрать демонстрационный проект и настроить отладку.
- Eclipse
- C++
- C
- Разработка робототехники
- Программирование микроконтроллеров
