Настройка eclipse для stm32 linux

Обновлено: 30.06.2024

Что требуется:

  • Более-менее современный дистрибутив Linux не ниже 2.6 (лучше 2.8)
  • Тулчейн: CodeSourcery G++ lite
  • STM32 Standart Peripherals Library v3.5.0
  • Eclipse + CDT + GDB Hardware Debugging — см. здесь
  • Open On-Chip Debugger (OpenOCD) — деббагер — лучше собрать из репозитория git, т.к. у версии 0.4.0 есть проблемы с флешем у stm'ок)
  • JTAG адаптер, поддерживаемый OpenOCD (почти любой, у меня J-LINK)
  • Файл тулчейна для cmake и заготовка проекта.

Структура проекта

  • stm32.cmake — файл тулчейна для cmake, немного описывался в прошлой статье, общий для всех проектов.
  • CMakeLists.txt — файл проекта cmake
  • stm32_flash.ld.in — скрипт линкера
  • stm32f10x_conf.h — заголовочный файл — конфигурация — в нем мы должны расскоментировать нужные нам инклуды.
  • stm32f10x_it — cтандартные обработчики прерываний
Файл тулчейна
Файл проекта cmake

Как завести?

cmake

В директории проекта запускаем в консоли:

Получаем проект для эклипса.

OpenOCD

Нужно найти скрипт для своего JTAG-адаптера в /usr/share/openocd/scripts/interface/
Запускаем openocd (пример для JLINK):

Теперь можно подключится к openocd c помощью телнета:

На 3333 порту будет находится интерфейс к gdb.

Eclipse
File -> Import

General -> Existing project into workspace

Выбираем путь к нашему проекту

Далее настраиваем для проекта отладку, как написано здесь, только порт отладчика 3333.

В приложенном архиве — файл тулчейна и заготовка проекта.
    , , , , , ,
  • +2
  • 02 июля 2011, 20:30
  • 1

Комментарии ( 18 )

А зачем CMake? Неужели нельзя создать проект средствами эклипса? CDT использует обычные Makefile. Ну а с cmake'ом я привык работать, и знаю его лучше чем make. А почему бы не поставить вот этот плагин, и не заморачиватся с мэйкфайлами. Боже мой — как сложно. А взять IAR + J-Link (20$ DIY) и по SWD иметь всё удовольствие минут за 5? хотя под linux тоже же самое за 15 минут. Хотя лампочками моргать можно просто выключателем в комнате. Студии XeoArt надо изучить вопрос о возможности использовании IE9. Особенно когда добавляешь коментарии — под ним не добавляется ничего — под FF4 работает.

Я тут проще поинтересуюсь по вашей статейке,
нельзя ли через cmake все таки автоматизировать создание hex'а?
Еще бы конечно avrdude как то тоже привязать но это уже не принципиально.

Я кстати из Win7 + WinAvr + cmake + Code::Blocks собирать собирает =) Но в практике еще не юзаю по выше озвученной причине.

Да можно… я это в последствии автоматизировал… это будет выглядеть так

только в WIN я это не тестировал — но один парень говорит что у него работает

О, оперативненько =)
Сейчас заметил что эти макро уже есть.
Но вот как пользоваться что-то не догоняю.
.hex автоматом не создается.
может как то make AVR_CREATE_HEX надо набрать? AVR_CREATE_HEX($) — где входная переменная это имя исполняемого файла или библиотеки…

те ты сразу создаешь либу или исполняемый файл

а потом то имя которое в них передавал пихаешь в этот макрос — а он запустит нужную прогу и сгенерит тебе HEX но учти что там у меня используется переменная $ — это папка куда валятся хексы ее нужно определить в главном cmake уровнем выше

После сего уже было принято решение поставить какую нибудь сборку в качестве второй системы. Побочный вопрос, который меня интересовал стал ли Linux настоящим конкурентом винды. Мое первое знакомство свершилось около 7 лет назад. Закончилось оно довольно быстро, если какие то проблемы с софтом можно было пережить, то проблемы с дровами было не решить. Увы в прошлый раз на этом все и закончилось.

Ну и чтобы не томить, мое субъективное мнение за 2 месяца ежедневного использования. Я не осилил бубунту, постоянное ощущение что все тормозит. Мне не хотелось напрягаться и лезть в дебри, поэтому выбор в пользу Mint с кедами(KDE). Вроде как это одно и тоже, но минт все равно роднее. Поэтому дальнейшие суждения про него.

Все довольно сильно изменилось. Куча плюсов и минусов. Из коробки можно посмотреть видео, послушать музыку, посидеть в инернетике, попечатать в офисе. Софта стало больше. Пользуюсь lte модемом, всегда считал что он говнище, ибо видосы под виндой нормально можно смотреть только в 360p и он постоянно перегревался и отваливался. Был слегка удивлен, когда тот же модем стал гнать 720p без напряга. Проблемы с перегревом магическим образом пропали. Есть и другие основания говорить, что в минте некоторые вещи действительно работают быстрее и это не миф.

Однако есть и минусы. Стоит сделать шаг влево, то танцы с бубном обеспечены, система так и осталась гиковской. Настройки системы распиханы так, что не догадаешься никогда. Не могу сказать что являюсь большим поклонником работы в консоли, но тут она у меня никогда не закрывается, ибо нужна постоянно. Неприятный момент, при большой загрузке проца звук выпадает, хотя полагаю это решаемо. Установщик программ бесполезный, ибо большинство программ или устаревшие, или их вообще нет. Приходится все равно гуглить, чтобы качать свежак. Бывает так что софт имеется, но он недопилен, и увы надежды что кто то поправит багу нет.

И пример. Захотелось мне посмотреть реально ли разрабатывать ПО для микроконтроллеров. Вы найдете тонны мануалов, по настройке Eclipse. Тем не менее, мне пришлось потратить прилично времени, чтобы таки написать прошивку и залить ее. Поэтому пусть будет одним мануалом больше.

Первая часть: нужно запустить прошивайку. Работает она из терминала, шьет только бинарные файлы.

Чтобы заполучить сей продукт, нужно скачать сырцы с git, а для это нужно поставить сам git

sudo apt-get install git

Далее сливаем сырцы

Теперь нужны всякие зависимые либы и тулзы. Среди них либа для работы с USB, тулза позволяющая получить информацию об установленных библиотеках. Назначение остальных не понятно.

sudo apt-get install libusb-1.0-0-dev pkg-config autotools-dev dh-autoreconf

Далее переходим в папку скачанных исходников. В папку /etc/udev/rules.d/ нужно копирнуть 3 файла правил, иначе каждый раз при попытке прошить, будет запрашиваться пароль.

После этого можно компилить проект.

./autogen.sh ./configure make

Теперь прошивайка установлена. Можно подключить st-link и закинуть какую нибудь прошивку. Hex не подойдет!

./st-flash write out.bin 0x8000000

Если нужно стереть флеш:

arm-none

Второй шаг. Нам нужен компилятор. Тот, что будет из исходника делать прошивку. С этим проще всего. Качаем GCC ARM toolchain версию для линукса. Кто когда либо пробовал устанавливать кокос под винду, то уже знает про него.

Просто распаковываем куда удобно и переходим в папку содержащую arm-none-eabi-gcc, запускаем терминал и выполняем команду

Если все правильно, то терминал выдаст номер версии.

arm-none

Третий шаг. Так как все тулзы выше консольные и не имеют никакого гуя, то нужно где то писать код. Eclipse вроде продвинутого блокнота, качаем тот, что называется IDE for C/C++ developers. Также распаковываем куда удобно.

Без имени

В самом эклипсе нужно установить GNU ARM Eclipse plug-ins. Делается это из меню help.

raw

Там же в настройках нужно указать, чтобы генерился bin файл вместо hex

ext

Далее настраиваем st link

И наконец пишем исходник. Проверял на Nucleo 411, исходники прикрепляю

Если подытожить. Даже хорошо понимая процесс создания проекта с нуля и имея тонну мануалов, пришлось попотеть с эклипсом. В целом мне довелось уже работать с CoIDE поэтому глобальной разницы нет, весь гемор в мелочах. Абсолютно аналогично и с остальными вещами, если вы пользуетесь бесплатным open source софтом под винду, ничего нового в принципе не будет. Немного пообвыкнуться и нормально. Может желание будет, сдую пыль с малины и чего нибудь напишу еще на эту тему.

Разработка и отладка для STM32F4Discovery в Ubuntu Linux: Eclipse Luna + CodeSourcery + OpenOCD

1. Подготовка окружения

Перед установкой всего набора ПО убедитесь, что у Вас не оказались в системе каким-то чудом старые версии того или иного ПО. Это можно сделать, например, следующим образом:

Также необходимо скачать STM32F4 DSP and standard peripherals library по следующей ссылке.

1.1. Установка Eclipse

1.1.1. Перед установкой Eclipse необходимо установить/обновить Java до версии 7+:

1.1.2. На странице переходим по ссылке Eclipse C/C++ IDE for Luna SR1". На открывшейся странице в зависимости от разрядности Вашей системы выбираем либо Linux-32 bit, либо Linux-64 bit, и переходим к загрузке Eclipse-дистрибутива.

1.1.3. Условимся, что установку Eclipse и, в дальнейшем, компилятора/компоновщика будем выполнять в каталог /opt. Его необходимо создать, если он не существует:

1.1.4. Теперь выполним распаковку и копирование ранее скачанного архива с Eclipse:

1.1.5. Создамим символическую ссылку на исполняемый файл Eclipse, расположенный по адресу /opt/eclipse/eclipse :

Теперь Eclipse должен запускаться, в т.ч. из терминала.

1.2. Установка набора средств компилятор+ассемблер+компоновщик (далее - toolchain)

1.2.1. Указать свои контактные данные, включая адрес электронной почты, на сайте и нажать кнопку "Get LITE".

1.2.2. Вам придёт письмо со ссылкой на скачивание, перейдя по которой Вам будет предложено для скачивания несколько версий toolchain-а. На момент написания данной заметки самой последней версией являлась Sourcery CodeBench Lite 2014.05-28. Кликнув по ссылке из письма, Вы попадёте непосредственно на страницу загрузки, где необходимо выбрать IA32 GNU/Linux TAR, т.е. toolchain будет скачен как обычный tar-архив.

1.2.3. После завершения скачивания создадим каталог, куда будет помещен toolchain:

1.2.4. Выполним распаковку архива с toolchain-ом в только что созданный каталог:

1.2.5. Пропишем наш toolchain в системе, добавив следующую строку в

1.2.6. После перезагрузки или повторного захода в систему под данной учётной записью изменения, сделанные в

/.profile, должны вступить в силу. Проверить это можно, например, выполнив следующую команду:

Если всё было выполнено правильно, то появится внушительный абзац различной информации, завершать который должна строка:

1.3. Установка st-flash – утилиты для прошивки микроконтроллеров ST

1.3.1. В первую очередь, устанавливаем зависимости:

1.3.2. В домашнем каталоге пользователя создадим скрытый каталог .src, куда будут в дальнейшем загружены исходники данной утилиты, и, собственно, выполнена сборка приложения:

1.3.3. По завершении сборки в каталоге stlink.git должен появиться файл st-flash, который необходимо скопировать в /usr/bin:

1.4. Установка OpenOCD v.0.8.0: Open On-Chip Debugger

1.4.1. Устанавливаем зависимости:

1.4.2. Загружаем и распаковываем исходные тексты OpenOCD:

1.4.3. Выполняем настройку, сборку и установку OpenOCD:

1.4.4. Теперь, если выполнить в терминале команду openocd -v, Вы должны увидеть нечто подобное:

А при наличии, например, подключенной к ПК отладочной платы STM32F4Discovery выполнение команды:

даст следующий "выхлоп":

2. Настройка Eclipse

2.1.1. После запуска Eclipse открыть меню Help -> Install New Software Шаг 2.1.2. В появившемся окне нажать кнопку Add и ввести:

2.1.2. В появившемся древовидном списке в разделе CDT Optional Features ставим галочку напротив C/C++ GDB Hardware Debugging:


2.1.4. Принимаем условия лицензионного соглашения и выполняем установку дополнения. По завершении установки Eclipse предложит Вам перезапустить себя – не торопитесь пока, т.к. на очереди ещё одно дополнение.

2.2. Установка дополнения GNU ARM C/C++

2.2.1. Открыть меню Help -> Install New Software

2.2.2. В появившемся окне нажать кнопку Add и ввести:

2.2.3. Ставим галочки напротив:

  • GNU ARM C/C++ Cross Compiler
  • GNU ARM C/C++ Generic Cortex-M Project Template
  • GNU ARM C/C++ J-Link Debugging
  • GNU ARM C/C++ OpenOCD Debugging
  • GNU ARM C/C++ STM32Fx Project Templates

2.2.4. Принимаем условия лицензионного соглашения, соглашаемся с тем, что какой-то контент не подписан и, следовательно, может быть не безопасен и выполняем установку дополнения.

3.1. Переходим в меню File -> New -> C Project

3.2. В появившемся меню выбираем следующие настройки:


3.3. После нажатия на Next появится окно Select Configurations. Никакие изменения тут не требуются.

3.4. После следующего нажатия на Next появится окно Cross GNU ARM Toolchain. Здесь необходимо выбрать Sourcery CodeBench Lite for ARM EABI и нажать Finish.

3.5. В каталоге проекта создадим подкаталог lib.

3.6. Нажав правой кнопкой мыши по появившемуся в дереве проекта каталогу lib, выбираем пункт пеню Import, выбираем General -> Filesystem и нажимаем Next:


3.7. В появившемся окне указываем путь до распакованного архива с библиотекой Standard Peripheral Library. Из архива с SPL нас интересуют далеко не все файлы. Список тех файлов/каталогов, которые подлежат импорту в наш проект, приведён далее:

  • STM32F4xx_DSP_StdPeriph_Lib_V1.4.0/Libraries/CMSIS/Device/ST/STM32F4xx/Source/Templates/system_stm32f4xx.c (ФАЙЛ)
  • STM32F4xx_DSP_StdPeriph_Lib_V1.4.0/Libraries/CMSIS/Device/ST/STM32F4xx/Include/ (КАТАЛОГ)
  • STM32F4xx_DSP_StdPeriph_Lib_V1.4.0/Libraries/CMSIS/Include/ (КАТАЛОГ)
  • STM32F4xx_DSP_StdPeriph_Lib_V1.4.0/Libraries/STM32F4xx_StdPeriph_Driver/ (КАТАЛОГ)

Остальные каталоги оставляем неотмеченными и нажимаем Finish.

3.8. В корне проекта создать каталог src и поместить в него файлы, расположенные в данном архиве.

3.9. Необходимо убедиться, что в настройках проекта выбран правильный toolchain. Идём в Project -> Properties -> C++ Build -> Toolchain Editor:


3.10. Необходимо убедиться, что переменная PATH содержит путь до исполняемых файлов toolchain. Идём в Project -> Properties -> C++ Build -> Environment и изменяем (или добавляем в случае отсутствия) переменную PATH:


3.11. Идём в Project -> Properties -> C++ Build -> Settings -> Target Processor. Для отладочной платы STM32F4Discovery оптимальным ARM-семейством (ARM Family) является cortex-m4:


3.12. Теперь необходимо прописать пути до всех подключаемых заголовочных файлов, которые имеют отношение к нашему проекту. Идём в Project -> Properties -> C++ General -> Path and Symbols. Нажимая на кнопку Add, последовательно добавляем следующие пути:

  • /$/src
  • /$/lib/CMSIS/Device/ST/STM32F4xx/Include
  • /$/lib/CMSIS/Include
  • /$/lib/STM32F4xx_StdPeriph_Driver/inc

При добавлении очередного пути в появляющемся окошке необходимо ставить все галочки. $ – встроенная в Eclipse строковая переменная, содержащая название проекта. В итоге должно получиться нечто подобное:


3.13 Теперь необходимо прописать пути до всех файлов с исходными текстами. Идём в Project -> Properties -> C++ General -> Path and Symbols. Переходим на вкладку Source Location. Нажимая на кнопку Add, последовательно добавляем следующие пути:

  • /ctrlv-demo/lib/CMSIS/Device/ST/STM32F4xx/Source
  • /ctrlv-demo/lib/STM32F4xx_StdPeriph_Driver/src
  • /ctrlv-demo/src

Должно получиться следующее:


3.14 Теперь добавляем предопределённые макропеременные. Перечень и описание макропеременных для добавления:

  • USE_STDPERIPH_DRIVER - для использования кода, имеющего отношение к STM32F4 Peripherial Library
  • USE_STM32F4_DISCOVERY - для использования специфичного для STM32F4 DISCOVERY кода
  • STM32F40XX - для указания, что используемый процессор принадлежит к семейству STM32F40x
  • ARM_MATH_CM4 - для использования математики, оптимизированной под ядро Cortex-M4

Идём в Project -> Properties -> C++ Build -> Settings -> Cross ARM C Compiler -> Preprocessor и последовательно добавляем перечисленные выши строки. В итоге должно получиться примерно следующее:


Ровно те же самые действия необходимо выполнить и в случае с Cross ARM GNU Assembler:


3.15 Вместе с демо-проектом, ссылка на который была приведена выше, поставляется файл-скрипт компоновщика (linker script). Необходимо прописать путь до него в настройках Cross ARM C Linker:


3.16. Изменяем формат будущего файла прошивки на Raw binary:


3.17. Собрать проект и убедиться, что он собирается. Если появятся ошибки, имеющие отношение к файлу stm32f4xx_fmc.c из SPL, то можно смело исключить данный файл из сборки (Exclude from Build), т.к. на него ничего не завязано. В итоге в консоли должны появиться надписи, похожие на следующие:


Для прошивки микроконтроллера воспользуемся ранее установленной утилитой st-flash. Команда в консоли для прошивки выглядит следующим образом:

5.1. Идём в меню Run -> Debug Configurations. Правой кнопкой мыши кликаем по пункту меню "GDB OpenOCD Debugging" и выбираем пункт меню "New":


5.2. Вкладка Main появившегося окна:


5.3. Вкладка Debugger появившегося окна:


5.4. Вкладка Common появившегося окна:


5.5. Изменения на остальных вкладках вносить не требуется. После внесения всех изменений нажмите Apply для сохранения изменений.

5.6. Для начала отладки нажмите Debug. Eclipse спросит о смене перспективы на Debug – конфигурации отображаемых окон в том или ином режиме разработки. Подтвердите смену, в итоге Вы должны увидеть нечто похожее:

image

В данной статье будет описано как установить eclipse для микроконтроллеров + FreeRTOS Task Aware Debugger.

На примере OS Windows, CubeMX и платы STM32L4Discovery.

Установка

Chocolatey — пакетный менеджер для Windows, аналог apt-get, позволяет через консоль устанавливать программы.
Открываем PowerShell.exe от имени администратора и выполнеяем:

Без JDK не запустится eclipse и CubeMX.
Открываем PowerShell.exe от имени администратора и выполнеяем:

Node.js содержит пакетный менеджер npm, необходимый для установки xpm.
Открываем PowerShell.exe от имени администратора и выполнеяем:

Xpm — менеджер пакетов xPack, позволит быстро установить необходимые утилиты для eclipse тремя строчками в командной строке.
Перезапускаем PowerShell.exe от имени администратора и выполнеяем:

Перезапускаем PowerShell.exe от имени администратора и выполняем:

Запускаем eclipse, Help -> Eclipse marketplace…

Вводим «GNU MCU» в окно поиска.

image

Оставляем всё как есть, нажимаем далее, далее, далее. Eclipse перезапустится.

Заходим в Packs, нажимаем Refresh.
Выбираем установку Pack’а в зависимости от вашего микроконтроллера:
После этого идём на кухню ставить чайник, процесс обновления не быстрый.

Когда вылезет ошибка, нажимаем Ignore All:

image

Переходим по ссылке, скачиваем и устанавливаем.
Запускаем STLinkReflash.exe, принимаем соглашения, выбираем [1] – Upgrade to J-Link.
В любой момент можно обратно вернуть ST-Link, выбрав пункт [3] – Restore ST-Link. Открываем в пуске J-flash lite, нажимаем ОК
Выбираем свой микроконтроллер и нажимаем Erase.

Создание проекта

В папке с проектами создадим 2 проекта:

Заходим в CubeMX, создаём новый проект.
Включаем FreeRTOS в проект, переключаем USE_TRACE_FACILITY -> ENABLED

RECORD_STACK_HIGH_ADDRESS -> Enable

SYS -> Timebase Source выбираем любой ненужный таймер, например TIM7

Включаем дополнительные функции по необходимости.
Нажимаем Generate Code.
Заходим в Eclipse -> New -> Project…
Выбираем C Project

Задаём имя проекта и его расположение, выбираем тип проекта.

Самое главное – указать верно ядро, в зависимости от вашего типа микроконтроллера (см. datasheet). Остальные настройки не важны.

Нажимаем next, next.
Если toolchain не определился автоматически, то указываем его расположение.
Нажимаем Finish.

Удаляем всё из дерева проекта:

Заходим в папку проекта armtest_cube и копируем всё, кроме .project и .cproject в папку проекта armtest.

Обновляем дерево проекта:

Заходим в настройки проекта Project -> Properties, выбираем необходимый микроконтроллер.
Заходим в настройки линкера, удаляем все имеющиеся Script files и добавляем ld файл из дерева проекта.

Подключаем библиотеку с поддержкой Floating Point:

Выбираем формат выходного файла Motorola S-record

Добавляем includ’ы:

Добавляем defin’ы для препроцессора:

Переименовываем startup файл «startup_stm32l476xx.s» в «startup_stm32l476xx.S». Иначе в debug’e появляются ошибки.
Run -> Debug configurations

image

Help -> Install new Software…

Включаем Debug, в новом меню FreeRTOS выбираем Task List + Heap Usage.

image

Получаем наглядное отображение загруженности Heap & Stack и прочие плюшки:

Читайте также: