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

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

 

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

$ sudo apt-get remove openocd eclipse gcc-arm-none-eabi

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

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

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

$ sudo apt-get install oracle-java8-installer oracle-java8-set-default

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

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

$ sudo mkdir /opt

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

$ sudo tar xvzf eclipse-cpp-luna-SR1-linux-gtk.tar.gz -C /opt

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

$ sudo ln -sf /opt/eclipse/eclipse /usr/bin/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:

$ sudo mkdir /opt/codesourcery

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

$ sudo tar xjf arm-2014.05-28-arm-none-eabi-i686-pc-linux-gnu.tar.bz2 --strip-components=1 -C /opt/codesourcery

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

PATH="/opt/codesourcery/bin:${PATH}"

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

$ arm-none-eabi-gcc -v

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

gcc version 4.8.3 20140320 (prerelease) (Sourcery CodeBench Lite 2014.05-28)

 

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

 

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

$ sudo apt-get install libusb-1.0-0-dev git

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

$ mkdir ~/.src && cd ~/.src
$ git clone https://github.com/texane/stlink stlink.git
$ cd stlink.git
$ ./autogen.sh && ./configure && make

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

$ sudo cp st-flash /usr/bin

 

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

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

$ sudo apt-get install libftdi-dev

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

$ cd ~/.src
$ wget http://sourceforge.net/projects/openocd/files/openocd/0.8.0/openocd-0.8.0.tar.gz
$ tar xvf openocd-0.8.0.tar.gz && cd openocd-0.8.0

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

$ ./configure --enable-stlink --enable-jlink –enable-ftdi
$ make
$ sudo make install

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

Open On-Chip Debugger 0.8.0 (2014-10-24-15:19)

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

$ openocd -f board/stm32f4discovery.cfg

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

Open On-Chip Debugger 0.8.0 (2014-10-24-15:19)
 Licensed under GNU GPL v2
 For bug reports, read
 http://openocd.sourceforge.net/doc/doxygen/bugs.html
 srst_only separate srst_nogate srst_open_drain connect_deassert_srst
 Info : This adapter doesn't support configurable speed
 Info : STLINK v2 JTAG v15 API v2 SWIM v0 VID 0x0483 PID 0x3748
 Info : using stlink api v2
 Info : Target voltage: 2.911032
 Info : stm32f4x.cpu: hardware has 6 breakpoints, 4 watchpoints

 

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

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

Name: CDT for Eclipse Luna+

Location: http://download.eclipse.org/tools/cdt/releases/8.5

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 и ввести:

Name: GNU ARM C/C++ Development Support
Location: http://gnuarmeclipse.sourceforge.net/updates

 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. Создание проекта в Eclipse

 

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

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

Project Type: Executable -> Empty Project
Toolchain: Cross ARM GCC

 

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, последовательно добавляем следующие пути:

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

При добавлении очередного пути в появляющемся окошке необходимо ставить все галочки. ${ProjName} – встроенная в 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), т.к. на него ничего не завязано. В итоге в консоли должны появиться надписи, похожие на следующие:

 

4. Прошивка отладочной платы


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

$ st-flash write ctrlv-demo.bin 0x8000000

 

5. Добавление возможности пошаговой отладки


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 – конфигурации отображаемых окон в том или ином режиме разработки. Подтвердите смену, в итоге Вы должны увидеть нечто похожее:

 

Удачной отладки!

© ООО "Контроль-В" 2012 - 2018