Разработка для микроконтроллеров STM32 в среде операционной системы Linux

№ 10’2015
PDF версия
В статье описан порядок действий по развертыванию полноценной среды разработки для микроконтроллеров STM32 в операционной системе Linux Lubuntu, выполняющийся на виртуальной машине. Среда содержит IDE Qt Creator, компилятор GCC для ARM Cortex-M микроконтроллеров и пакет утилит stlink для внутрисхемной отладки через программатор/отладчик ST-Link/V2.

Введение

Qt Creator — это современная, кросс-платформенная, бесплатная интегрированная среда разработки (IDE) для языков С и С++ (а также QML, но для ARM Cortex-M он неприменим).

Выбор Qt Creator в качестве IDE для микроконтроллеров ARM Cortex-M не является традиционным решением. Сейчас доступно множество платных и бесплатных специализированных IDE, однако автор выбрал Qt Creator, поскольку одни среды не дают столь богатых возможностей редактирования кода на C/C++, а другие, основанные на IDE Eclipse, работают заметно медленнее, чем Qt Creator.

Среди достоинств Qt Creator можно выделить следующие:

  • Богатые возможности редактирования кода:
    • автодополнение;
    • подсветка синтаксиса, возможность создавать свои виды подсветки;
    • автоматическое изменение прототипа функции при изменении ее определения и наоборот;
    • перемещение аргументов функции «вперед/назад» одновременно для прототипа и определения;
    • поиск по проекту, замена идентификатора и другие.
  • Поддержка большого числа компиляторов: GCC, Clang, MinGW, MSVC, Linux ICC и др. В свете разработки для ARM Cortex-M интересует поддержка GCC-компилятора.
  • Графический интерфейс для отладчика GDB, который, как и компилятор GCC, входит в инструментарий для сборки под ARM Cortex-M.
  • Поддержка автоматизированных систем сборки qbs, autotools, cmake, qmake и систем контроля версий Subversion, Git и других.

Qt Creator может выполняться на различных операционных системах, выбор же Linux обусловлен тем фактом, что внутрисхемная отладка с помощью GDB-отладчика работает только в этой операционной системе [8].

Несколько слов о том, почему автор выбрал виртуальную машину для разворачивания среды разработки. Работа в среде виртуальной машины дает следующие преимущества:

  • Независимость от аппаратного и (в какой-то мере) от программного обеспечения рабочей станции.
  • Возможность легко перенести виртуальную машину с одного компьютера на другой. Например, можно разместить файл виртуального жесткого диска на USB Flash-накопителе и работать в одном и том же окружении везде, где установлена программа-менеджер виртуальных машин (VirtualBox).
  • Гарантированная повторяемость действий как следствие независимости от аппаратного и программного обеспечения рабочей станции.

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

Далее следует описание настройки виртуальной машины и установки на нее операционной системы Linux Lubuntu. Пользователи, у которых операционная система Linux Ubuntu или производная от нее (например, Kubuntu, Xubuntu, Lubuntu) уже установлена на компьютер, могут пропустить соответствующие разделы.

 

Выбор дистрибутива Linux

Прежде всего, следует обосновать выбор операционной системы Linux Lubuntu. Автор выбрал именно ее, поскольку она основана на популярном дистрибутиве Linux Ubuntu, что означает полную совместимость программных пакетов, наличие необходимых драйверов для оборудования, а также огромного количества руководств, советов и прочей полезной информации, накопленной сообществом в сети Интернет.

Lubuntu отличается от популярной Ubuntu лишь другим оконным менеджером и средой рабочего стола (Openbox и LXDE против Unity и GNOME, которые действуют в Ubuntu). При разработке оконного менеджера Openbox и среды рабочего стола LXDE акцент сделан на малое потребление ресурсов компьютера, что положительно сказывается на скорости работы операционной системы в целом в среде виртуальной машины.

Загрузить русифицированную Lubuntu в виде образа установочного диска можно с сайта [5]. Автор использовал 32‑битную Lubuntu 14.04 LTS Trusty Tahr (LTS — версия с долговременной поддержкой в течение 3 лет). Выбор в пользу 32 бит был сделан из желания избежать в будущем возможных проблем с совместимостью между 64‑ и 32‑битными программными пакетами. Результатом загрузки должен стать файл lubuntu‑14.04.1‑desktop-i386.iso — образ установочного CD-ROM-диска, который в дальнейшем следует открыть в программе-менеджере виртуальных машин VirtualBox.

 

Выбор и установка виртуальной машины

В данном случае под виртуальной машиной понимается программа-менеджер, которая устанавливается непосредственно на рабочую станцию и эмулирует действие виртуального компьютера. Рабочая станция функционирует под управлением операционной системы — в дальнейшем мы будем называть ее хостовой (основной) операционной системой. На виртуальный компьютер (виртуальную машину) в дальнейшем будет установлена гостевая операционная система.

Автор предлагает использовать виртуальную машину VM Virtual Box от компании Oracle. Среди достоинств следует выделить ее возможность выполняться на большом количестве операционных систем [1], среди которых семейство Windows (XP, 2000, Server 2003, Server 2008, Server 2012, Vista, 7, 8), семейство Linux (Ubuntu, Debian, Suse, openSuse, Fedora, Red Hat, ArchLinux), а также Mac OS X, Solaris и другие.

Далее предполагается, что на рабочей станции установлена хостовая операционная система Microsoft Windows 7 Ultimate SP1 64‑bit и есть доступ в Интернет.

Virtual Box можно бесплатно загрузить с сайта [2]. Для работы потребуется версия VirtualBox 5.0 for Windows hosts (самая свежая на момент написания статьи), в результате загрузки должен быть получен файл с именем VirtualBox‑5.0.0-101573‑Win.exe или подобным. Процесс установки виртуальной машины Virtual Box тривиальный и не отличается от установки любой другой программы для Windows. Обратить внимание нужно лишь на то, чтобы при установке были выбраны все компоненты VirtualBox (рис. 1).

Выбор компонентов при установке VirtualBox

Рис. 1. Выбор компонентов при установке VirtualBox

После установки Virtual Box обязательно следует установить дополнение VirtualBox 5.0 Oracle VM VirtualBox Extension Pack, которое также можно загрузить с сайта [2]. Данное дополнение позволит подключать устройства USB 2.0 к виртуальной машине. Это важно, так как используемый программатор/отладчик ST-LINK v2 подключается к рабочей станции именно по интерфейсу USB 2.0.

Дополнение представляет собой файл Oracle_VM_VirtualBox_Extension_Pack‑5.0.0-101573.vbox-extpack. Расширение файлов *.vbox-extpack автоматически связывается с VirtualBox после ее установки, поэтому при попытке открыть файл запускается программа Virtual Box с диалогом об установке (рис. 2).

Установка дополнения Extension Pack для VirturalBox

Рис. 2. Установка дополнения Extension Pack для VirturalBox

 

Создание и настройка виртуальной машины

Здесь и далее под выражением «виртуальная машина» понимается виртуальный компьютер, на котором выполняется гостевая операционная система (в нашем случае Linux Lubuntu).

Для создания новой виртуальной машины в VirtualBox следует выбрать пункт меню «Машина» -> «Создать…». Откроется окно мастера, в нем нужно нажать кнопку «Экспертный режим», на дисплей будет выведено окно, в котором можно указать сразу несколько параметров создаваемой виртуальной машины (рис. 3).

Создание новой виртуальной машины. Шаг 1

Рис. 3. Создание новой виртуальной машины. Шаг 1

При создании виртуальной машины в VirtualBox обязательно указывается тип гостевой операционной системы. Если ввести в поле «Имя» строку Lubuntu, то VirtualBox автоматически установит тип и версию операционной системы Linux и Ubuntu (32‑bit) соответственно. Следует убедиться в том, чтобы разрядность дистрибутива Lubuntu и заданная в VirtualBox разрядность совпадали (в нашем случае 32 бит).

Объем памяти следует указать не менее 1 Гбайт. Меньший объем может замедлить работу Lubuntu, слишком большой размер устанавливать нет смысла, так как, во‑первых, на этот объем уменьшится доступная память для хостовой операционной системы, а во‑вторых, 32‑битная операционная система не может адресовать более 4 Гбайт оперативной памяти.

Необходимо убедиться, что выбран пункт «Создать новый виртуальный жесткий диск». После нажатия на кнопку «Создать» на дисплей будет выведено окно с диалогом создания виртуального жесткого диска (рис. 4).

Создание новой виртуальной машины. Шаг 2

Рис. 4. Создание новой виртуальной машины. Шаг 2

Объем диска следует установить не менее 8 Гбайт, чтобы в дальнейшем хватило места для установки всех необходимых для работы программных пакетов. Тип жесткого диска автор оставил без изменений — VDI, формат хранения — «фиксированный». Фиксированный виртуальный жесткий диск означает в данном случае, что для его размещения на диске будет создан файл объемом, равным объему создаваемого виртуального диска. Это должно обеспечить минимальную фрагментацию файла виртуального диска и, как следствие, максимальную скорость доступа к нему. После нажатия кнопки «Создать» начнется процесс формирования виртуального жесткого диска, по завершении которого на дисплей будет выведено окно VirtualBox с готовой к запуску гостевой операционной системой Lubuntu (рис. 5).

Виртуальная машина готова к запуску

Рис. 5. Виртуальная машина готова к запуску

Настройка графической подсистемы виртуальной машины

Рис. 6. Настройка графической подсистемы виртуальной машины

Далее потребуется небольшая настройка созданной виртуальной машины. Во‑первых, следует отключить эмуляцию ускорения 2D- и 3D-графики, если этого не сделать, то среда разработки Qt Creator, возможно, не будет нормально запускаться. Перейти к окну настройки графики можно, выбрав пункт меню «Машина» -> «Настроить…» и далее вкладку «Дисплей» (рис. 6).

Объем видеопамяти можно увеличить до максимально возможных 128 Мбайт (рис. 6).

Во‑вторых, на виртуальной машине следует включить контроллер USB 2.0, поскольку программатор/отладчик ST-Link/V2 подсоединяется к компьютеру именно по USB 2.0. Сделать это можно также в настройках виртуальной машины, выбрав пункт «USB» (рис. 7).

Настройка USB-контроллера виртуальной машины

Рис. 7. Настройка USB-контроллера виртуальной машины

 

Установка Linux Lubuntu на виртуальную машину

После создания и настройки виртуальной машины можно приступать к установке гостевой операционной системы Linux Lubuntu. Необходимо, чтобы к этому моменту на диске был записан образ установочного CD-ROM-диска Lubuntu — файл с расширением *.iso (о том, как его получить, рассказано в разделе «Выбор дистрибутива Linux»).

Для начала установки следует включить виртуальную машину, выбрав пункт меню «Машина» -> «Запустить», на дисплее появится диалог выбора образа загрузочного диска (рис. 8).

В диалоге (рис. 8) следует выбрать загруженный ранее образ установочного диска Lubuntu. В результате в привод оптических дисков виртуальной машины будет загружен установочный диск Lubuntu, и начнется установка. Образ диска можно загрузить в привод виртуальной машины вручную, для этого надо выбрать пункт меню «Устройства» -> «Оптические диски» -> «Выбрать образ диска…».

Выбор загрузочного диска при первом запуске виртуальной машины

Рис. 8. Выбор загрузочного диска при первом запуске виртуальной машины

Далее виртуальная машина начнет выполнять программу-установщик с только что вставленного установочного диска. Установщик Lubuntu предложит выбор языка (рис. 9), с помощью курсорных клавиш следует выбрать русский язык и нажать клавишу Enter.

Выбор языка

Рис. 9. Выбор языка

Далее на дисплее виртуальной машины появится меню вариантов загрузки (рис. 10), следует выбрать пункт «Установить Lubuntu».

Выбор вариантов загрузки

Рис. 10. Выбор вариантов загрузки

Затем на дисплей виртуальной машины будет выведен диалог выбора языка, следует выбрать русский язык и нажать «Продолжить». После этого будет предложено скачать обновления при установке и установить стороннее программное обеспечение (рис. 11).

Выбор вариантов установки Lubuntu

Рис. 11. Выбор вариантов установки Lubuntu

От обоих предложений следует отказаться и нажать «Продолжить». Далее программа-установщик предложит стереть содержимое единственного виртуального жесткого диска и установить на него Lubuntu, с предложением следует согласиться (рис. 12) и нажать «Установить сейчас».

Выбор типа установки Lubuntu

Рис. 12. Выбор типа установки Lubuntu

Далее последуют диалоги выбора часового пояса и выбора раскладки клавиатуры, можно выбрать Moscow, русскую раскладку и подтвердить выбор, нажимая «Продолжить». После этого появится окно, в котором следует вписать имя пользователя и пароль (рис. 13).

Ввод имени пользователя и пароля

Рис. 13. Ввод имени пользователя и пароля

Автор рекомендует ввести короткое имя пользователя и пароль (автор ввел имя andy). И хотя короткий пароль небезопасен, однако в дальнейшем потребуется его частый ввод, а ввод короткого пароля заметно экономит рабочее время. Также можно выбрать пункт «Входить в систему автоматически», это избавит от необходимости вводить пароль каждый раз при запуске виртуальной машины.

После нажатия на «Продолжить» начнется длительный процесс установки операционной системы Lubuntu на виртуальную машину, по завершении которого программа-установщик предложит перезагрузить виртуальную машину. Следует нажать «Перезагрузить», если виртуальная машина не перезагрузилась, то можно сделать это принудительно, выбрав пункт меню «Машина» -> «Перезапустить».

После перезагрузки можно увидеть рабочий стол операционной системы Lubuntu (рис. 14).

Операционная система Lubuntu, выполняющаяся на виртуальной машине VirtualBox

Рис. 14. Операционная система Lubuntu, выполняющаяся на виртуальной машине VirtualBox

Если рабочая станция имеет выход в сеть Интернет, то виртуальная машина также автоматически получает доступ в Интернет. Через некоторое время после запуска в Lubuntu появится окно с предложением обновить программное обеспечение через Интернет (рис. 14). Следует согласиться и дождаться окончания обновления, затем перезагрузить Lubunu, выбрав в Lubuntu пункт главного меню «Завершить сеанс» -> «Перезагрузить».

Многие дальнейшие действия в Lubuntu будут выполняться из терминала. Программу-терминал можно запустить несколькими способами:

  • Нажать сочетание клавиш Ctrl-Alt-T.
  • В файловом менеджере PCManFM нажать правой кнопкой мыши на каталоге и выбрать «Открыть в терминале». Способ очень удобен, так как текущим каталогом в терминале становится каталог, выбранный в файловом менеджере.

Также можно выбрать в Lubuntu пункт главного меню «Стандартные» -> LXTerminal.

Пара слов о переключении раскладки клавиатуры между латинской и русской в Linux Lubuntu. По умолчанию комбинация клавиш для переключения задана Ctrl-пробел; чтобы задать более привычную (для пользователей Windows) комбинацию Ctrl-Shift или Alt-Shift, следует зайти в главное меню Lubuntu «Параметры» -> «Методы ввода с клавиатуры», вкладка «Основные» -> «Комбинации клавиш» и нажать кнопку «…». Текущую комбинацию Ctrl-space следует удалить и добавить новую, поле «Код клавиши» оставить пустым и выбрать пункты, например, Alt, Shift и Release. Изменения вступят в силу после перезагрузки Lubuntu.

 

Установка дополнений для обеспечения комфортной работы

Сразу после установки в Lubuntu будет установлено разрешение экрана 640×480 пикселей, что явно недостаточно для комфортной работы. Чтобы установить большее разрешение, необходимо установить так называемые «Дополнения гостевой операционной системы». Кроме этого, дополнения гостевой операционной системы позволят настроить общую папку для обмена файлами между хостовой и гостевой операционной системой.

Для этого следует выбрать пункт меню «Устройства» -> «Подключить образ диска Дополнений гостевой ОС…». В системе Lubuntu автоматически будет смонтирован оптический диск с названием, начинающимся с VBOXADDITIONS. Его содержимое можно просмотреть, например, в файловом менеджере PCManFM, запустить который предлагается либо с «Панели запуска приложений», либо из главного меню Lubuntu — аналог меню «Пуск» операционных систем Windows. Оптический диск должен содержать исполняемый файл VBoxLinuxAdditions.run, включающий команды по сборке и установке модулей дополнений гостевой операционной системы.

Необходимо открыть оптический диск в терминале, что можно сделать в файловом менеджере PCManFM, нажав на название диска правой кнопкой мыши и выбрав пункт «Открыть в терминале». Поскольку некоторые модули собираются непосредственно перед установкой, то в системе должен быть установлен комплект пакетов для сборки — компиляторов, линковщиков, библиотек и др. Следует установить нужные для сборки пакеты, выполнив в терминале команду:

sudo apt-get install build-essential

После окончания установки можно установить модули дополнений гостевой операционной системы, выполнив команду:

sudo./VBoxLinuxAdditions.run

По завершении установки следует перезагрузить Lubuntu, затем рабочий стол Lubuntu будет автоматически подстраиваться под размеры окна VirtualBox. Кроме этого, можно включить полноэкранный режим, выбрав в VirtualBox пункт меню «Вид» -> «Режим полного экрана».

Также появится возможность использовать общий для хостовой и гостевой операционных систем буфер обмена. Чтобы задействовать эту возможность, следует в VirtualBox в главном меню выбрать пункт «Устройства» -> «Общий буфер обмена» -> «Двунаправленный». Теперь появится возможность переносить текстовую информацию между системами с помощью привычных сочетаний Ctrl-C, Ctrl-V.

Полезной может оказаться возможность переносить файлы между хостовой и гостевой операционными системами. Чтобы ее задействовать, следует в VirtualBox выбрать пункт главного меню «Устройства» -> «Общие папки» -> «Настроить общие папки». В появившемся окне следует нажать кнопку «Добавить новую общую папку», в диалоге выбрать путь к общей папке в хостовой операционной системе (автор ввел C:\Users\Andy\VirtualBox VMs\Lubuntu\share, имя папки автоматически установилось shared), а также отметить пункты «Авто-подключение» и «Создать постоянную папку».

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

sudo adduser andy vboxsf

Здесь andy — имя пользователя, которое было введено на этапе установки Lubuntu на виртуальную машину (рис. 13).

После перезагрузки Lubuntu можно убедиться в том, что общая папка позволяет переносить файлы из одной операционной системы в другую. В Linux Lubuntu общая папка расположена в корне файловой системы в папке /media/ (в случае автора полный путь /media/sf_shared).

Автор столкнулся с проблемой, когда после очередного обновления Lubuntu через Интернет перестал работать общий буфер обмена. Для решения этой проблемы необходимо повторить некоторые действия, описанные выше: подключить диск дополнений гостевой операционной системы, открыть его в терминале и выполнить команду:

sudo./VBoxLinuxAdditions.run

 

Установка Qt Creator

На этом этапе имеем настроенную виртуальную машину с установленной операционной системой Linux Lubuntu. Далее необходимо установить и настроить интегрированную среду разработки Qt Creator, непосредственно в которой будет вестись разработка для микроконтроллеров ARM Cortex-M фирмы ST Microelectronics.

Среда Qt Creator является свободно распространяемым продуктом, поэтому ее можно бесплатно загрузить с официального сайта [6]. Так как Qt Creator кросс-платформенное приложение, то на официальном сайте будет предложен выбор для различных операционных систем, следует загрузить версию для Linux/X11 32 бит. Автор загрузил последнюю на момент написания статьи версию Qt Creator 3.4.2 for Linux/X11 32‑bit. Результатом загрузки должен стать файл программы-установщика qt-creator-opensource-linux-x86-3.4.2.run.

Далее следует открыть в терминале каталог, куда был сохранен данный файл (для автора это /home/andy/Загрузки), и разрешить выполнение файла, введя следующую команду:

chmod +x qt-creator-opensource-linux-x86–3.4.2.run

Затем нужно выполнить файл программы-установщика, введя в терминале

./qt-creator-opensource-linux-x86–3.4.2.run

В результате запустится программа-установщик с графическим интерфейсом. Все поля можно оставить без изменений, нажимая «Далее». После окончания установки можно перезагрузить Lubuntu, в главном меню должен появиться пункт «Программирование», а в нем пункт Qt Creator. Внешний вид работающей среды Qt Creator показан на рис. 15.

Интегрированная среда разработки Qt Creator

Рис. 15. Интегрированная среда разработки Qt Creator

Если в процессе установки возникнет ошибка cannot find — lGL, то следует установить пакет libgl-dev, выполнив в терминале:

sudo apt-get install libgl-dev

Работая с более ранней версией VirtualBox, автор столкнулся с проблемой краха Qt Creator сразу после запуска. Оказалось, что проблемы вызывало включенное ускорение 2D- и 3D-графики в VirtualBox, если проблем при запуске не возникает, то ускорение можно оставить включенным, иначе его следует выключить, как это было описано в главе «Создание и настройка виртуальной машины» (рис. 6).

 

Настройка Qt Creator

Программирование для микроконтроллеров ARM Cortex-M подразумевает, что на целевом устройстве нет полноценной операционной системы, такой как Linux или Android. А среда Qt Creator предназначена для создания программ именно для таких «больших» операционных систем. Поэтому необходимо включить в Qt Creator возможность сборки для устройств, работающих без операционной системы. Для этого в Qt Creator следует включить модуль BareMetal: выбрать пункт главного меню «Справка» -> «О модулях», в открывшемся окне следует отметить пункт Device Support -> BareMetal (рис. 16).

Настройка модулей Qt Creator

Рис. 16. Настройка модулей Qt Creator

Кроме этого, так как сборка проекта для STM32 будет осуществляться с помощью системы автоматизации сборки QBS, то следует убедиться, что также выбран пункт Build Systems -> QbsProjectManager.

Изменения вступят в силу после перезапуска среды Qt Creator.

 

Установка инструментария для сборки под микроконтроллеры ARM Cortex-M

Под инструментарием для сборки понимается непосредственно сам кросс-компилятор, набор сопутствующих утилит для получения файла прошивки микроконтроллера из файлов исходного кода на языке C и С++, а также программа-отладчик. Выбор автора пал на свободно распространяемый инструментарий GCC ARM Embedded — реализацию компиляторов GCC и сопутствующих утилит для микроконтроллеров Cortex-M0/M0+/M3/M4/M7, а также Cortex-R4/R5/R7.

Инструментарий GCC ARM Embedded доступен для загрузки из персонального архива пакетов (PPA) на сайте launchpad.net [9]. Чтобы получить доступ к данному архиву, необходимо добавить новый репозиторий в систему, выполнив в терминале:

sudo add-apt-repository ppa: terry.guo/gcc-arm-embedded

Предварительно рекомендуется удалить предустановленные в Lubuntu пакеты с таким же именем:

sudo apt-get remove binutils-arm-none-eabi gcc-arm-none-eabi

После этого для установки инструментария выполнить:

sudo apt-get update
sudo apt-get install gcc-arm-none-eabi

Будет установлена последняя проверенная версия инструментария, автор получил версию gcc-arm-none-eabi i386 4.9.3.2015q2-1trusty1. Проверить версию и правильность установки можно, выполнив в терминале:

arm-none-eabi-gcc–v

 

Получение пакета для работы с программатором/отладчиком ST-Link/V2

На официальном сайте STMicroelectronics доступен для загрузки драйвер для программатора/отладчика ST-Link V2 [12], однако в списке поддерживаемых операционных систем нет Linux. Поэтому для отладки и прошивки микроконтроллеров через ST-Link V2 в среде Linux Lubuntu придется установить сторонний пакет утилит stlink, доступный для свободной загрузки [10].

Пакет stlink представлен в виде исходного кода и находится в удаленном репозитории системы управления версиями Git [10]. Поэтому для получения исполняемого файла утилиты необходимо, во‑первых, получить копию исходных кодов утилиты, а во‑вторых, собрать (скомпилировать) утилиту stlink.

Первым делом следует установить пакет для работы с Git-репозиториями и выполнить в терминале команду:

sudo apt-get install git

После окончания установки можно скопировать исходные коды stlink в файловую систему Lubuntu, для этого следует выполнить команду:

git clone https://github.com/texane/stlink stlink.git

В домашнем каталоге (в данном случае в /home/andy/) должен появиться каталог stlink.git с исходными кодами пакета.

Пакет stlink использует библиотеку libusb для работы с USB-контроллером, соответственно, потребуется установить ее, выполнив в терминале:

sudo apt-get install libusb‑1.0–0‑dev

Также для сборки понадобится пакет pkg-config, который можно установить, выполнив:

sudo apt-get install pkg-config

Для автоматизации сборки stlink используется пакет autotools, для его установки надо выполнить:

sudo apt-get install autoconf

Вместе с пакетом autoconf будут установлены automake, autotools-dev, libsigsegv2, m4.

После этого можно приступить непосредственно к сборке пакета stlink, для этого следует войти в каталог, куда был скопирован его исходный код: cd ~/stlink.git.

Далее последовательно выполнить следующие команды:

./autogen.sh
./configure
make

В результате сборки в каталоге stlink.git должны появиться исполняемые файлы пакета: st-flash, st-info, st-term, st-util.

 

Подключение ST-Link/V2 к виртуальной машине

Теперь нужно подключить программатор/отладчик ST-Link/V2 к рабочей станции через интерфейс USB и обеспечить его подключение к виртуальной машине. Установка драйверов для хостовой операционной системы (в данном случае Windows) не требуется.

Обычно, чтобы подключить устройство к виртуальной машине в VirtualBox, следует выбрать пункт главного меню «Устройства» -> USB, далее в списке подключенных к хостовой операционной системе USB-устройств выбрать нужное. После этого устройство становится доступным в гостевой операционной системе (таким образом можно обмениваться файлами между системами без настройки общих папок — с помощью USB Flash-накопителя).

Однако описанная выше последовательность действий не срабатывает при попытке подключения программатора/отладчика ST-Link/V2. Дело в том, что ST-Link/V2 в одном из полей описания USB-устройства возвращает «мусор», непечатаемые символы. Чтобы устранить эту проблему, надо сделать следующее.

ST-Link/V2 должен быть подключен к рабочей станции. В VirtualBox выбрать пункт меню «Устройства» -> USB -> «Настроить USB…», затем добавить фильтр устройств USB, щелкнув правой кнопкой по пустому списку фильтров (рис. 7) и выбрав пункт контекстного меню «Добавить фильтр из устройства». Появится список подключенных к хостовой операционной системе устройств, среди которых нужно выбрать STMicroelectronics STM32 STLink.

В списке фильтров появится новый фильтр для ST-Link/V2, следует щелкнуть по нему правой кнопкой и в контекстном меню выбрать пункт «Изменить фильтр», появится окно «Свойства USB-фильтра» (рис. 17).

Настройка фильтра USB-устройства

Рис. 17. Настройка фильтра USB-устройства

Видно, что поле «Серийный №» содержит «мусор» — необходимо очистить его и нажать ОК. Теперь программатор/отладчик
ST-Link/V2 будет автоматически подключаться к виртуальной машине, как только его подсоединят к USB-порту рабочей станции.

Убедиться, что ST-Link/V2 подключен к виртуальной машине, можно, набрав в терминале:

lsusb

Пример вывода команды lsusb при успешно подключенном ST-Link/V2:

Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 003: ID 0483:3748 STMicroelectronics ST-LINK/V2
Bus 002 Device 002: ID 80ee:0021 VirtualBox USB Tablet
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

Убедившись, что программатор/отладчик подключен, можно опробовать полученную ранее утилиту st-flash, например выполнив стирание flash-памяти микроконтроллера. К программатору/отладчику должен быть подключен целевой микроконтроллер, подано напряжение питания, цепь сброса микроконтроллера должна быть свободна.

Стирание flash-памяти микроконтроллера выполняется командой:

sudo./st-flash erase

Текущим каталогом должен быть каталог пакета stlink (~/stlink.git в данном случае). Пример вывода в консоль при успешном стирании:

andy@vm:~/stlink.git$ sudo./st-flash erase
[sudo] password for andy:
2015–08–04T20:33:38 INFO src/stlink-usb.c: — exit_dfu_mode
2015–08–04T20:33:38 INFO src/stlink-common.c: Loading device parameters…
2015–08–04T20:33:38 INFO src/stlink-common.c: Device connected is: F4 device, id 0x20006411
2015–08–04T20:33:38 INFO src/stlink-common.c: SRAM size: 0x30000 bytes (192 KiB), Flash: 0x100000 bytes (1024 KiB) in pages of 16384 bytes

Можно заметить, что для доступа утилиты st-flash к USB-устройству (программатору/отладчику ST-Link/V2) потребовались права суперпользователя (команда sudo) и ввод пароля. Чтобы среда Qt Creator смогла автоматически запускать утилиты st-flash и st-util, необходимо соответствующим образом настроить менеджер устройств udev, являющийся составной частью Linux Lubuntu.

Для этого необходимо скопировать файл правил 49‑stlinkv2.rules из каталога, где был собран пакет stlink, в каталог /etc/udev/rules.d, выполнив команду:

sudo cp ~/stlink.git/49‑stlinkv2.rules rules.d/49‑stlinkv2.rules

Далее следует перезагрузить правила udev, выполнив следующие команды:

udevadm control — reload-rules
udevadm trigger

После этого в системе должно появиться устройство stlinkv2, проверить, так ли это, можно, выполнив в терминале:

ls/dev/stlink*

Если менеджер устройств udev настроен правильно, то, когда программатор/отладчик ST-Link/V2 подключен к рабочей станции, результат выполнения команды выше должен быть подобен такому:

/dev/stlinkv2_2

 

Добавление компилятора и отладчика в Qt Creator

Сборка в Qt Creator осуществляется с указанием комплекта для сборки. Комплект — это сочетание компилятора, отладчика и типа устройства, для которого создается программа. На данном этапе необходимо создать новый комплект для сборки под микроконтроллеры ARM Cortex-M и добавить в него полученный на предыдущем шаге компилятор и отладчик из инструментария.

Для добавления компилятора необходимо в Qt Creator выбрать пункт главного меню «Инструменты» -> «Параметры…», далее выбрать пункт «Сборка и запуск», затем — вкладку «Компиляторы» (рис. 18).

Добавление компилятора GCC ARM Embedded в Qt Creator

Рис. 18. Добавление компилятора GCC ARM Embedded в Qt Creator

Потом следует нажать кнопку «Добавить», ввести путь к компилятору /usr/bin/arm-none-eabi-gcc и произвольное название, например GCC ARM Cortex-M.

Затем можно добавить отладчик, для этого следует выбрать вкладку «Отладчики», задать путь к отладчику /usr/bin/arm-none-eabi-gdb и произвольное имя, например GDB ARM Cortex-M (рис. 19). Теперь при начале сеанса отладки Qt Creator автоматически будет запускать отладчик GDB для микроконтроллеров ARM Cortex-M.

Добавление отладчика GDB ARM Embedded в Qt Creator

Рис. 19. Добавление отладчика GDB ARM Embedded в Qt Creator

Отладчик GDB взаимодействует с аппаратным отладчиком ST-Link/V2 по схеме «клиент-сервер», в качестве клиента выступает GDB, а в качестве сервера — полученная ранее утилита st-util, которая в свою очередь взаимодействует с ST-Link/V2 по USB-интерфейсу.

На данном этапе нужно настроить Qt Creator так, чтобы при запуске сеанса отладки он автоматически запускал утилиту st-util с необходимыми параметрами. Для этого следует в окне «Параметры» выбрать пункт “BareMetal”, затем нажать кнопку «Добавить» и в появившемся списке выбрать пункт «Утилита ST-LINK» (рис. 20).

В списке появится строка «Утилита ST-LINK», а в правой части окна — поля параметров запуска утилиты (рис. 20). В поле «Режим запуска» следует установить значение «Запуск в режиме TCP/IP», в поле «Исполняемый файл» необходимо ввести путь к утилите st-util, в данном случае путь будет /home/andy/stlink.git/st-util, также следует отметить пункт «Расширенный режим». Остальные настройки можно оставить, как показано на рис. 20.

Настройка сервера отладки в Qt Creator

Рис. 20. Настройка сервера отладки в Qt Creator

Когда сервер отладки st-util настроен, можно добавить в Qt Creator новое устройство — микроконтроллер ARM Cortex-M. Для этого в окне «Параметры» следует выбрать пункт «Устройства» и нажать кнопку «Добавить…», появится окно «Выбор мастера настройки устройства», в котором следует выбрать пункт «Голое устройство» и нажать «Запустить мастер» (рис. 21).

Добавление нового устройства в Qt Creator

Рис. 21. Добавление нового устройства в Qt Creator

Появится окно «Настройка новой конфигурации голого устройства» (рис. 22). В поле «Название» можно ввести свое название устройства, например ARM Cortex-M micro, в поле «Тип сервера GDB» обязательно надо выбрать значение «Утилита ST-LINK».

Настройка нового устройства в Qt Creator

Рис. 22. Настройка нового устройства в Qt Creator

Таким образом, добавляемое новое устройство будет связано с настроенным ранее сервером отладки в виде утилиты st-util.

Теперь можно связать настроенные ранее компилятор, отладчик, сервер отладки и устройство воедино — создать новый комплект для сборки. Для этого следует выбрать вкладку «Комплекты» и нажать «Добавить» (рис. 23).

Создание комплекта для сборки для ARM Cortex-M в Qt Creator

Рис. 23. Создание комплекта для сборки для ARM Cortex-M в Qt Creator

В поле «Тип устройства» установить значение «Голое устройство», поле «Устройство» автоматически заполнится добавленным ранее устройством ARM Cortex-M micro. В поле «Компилятор» следует выбрать введенное ранее имя компилятора GCC ARM Cortex-M, в поле «Отладчик» — введенное ранее имя отладчика GDB ARM Cortex-M.

 

Система автоматизации сборки QBS

Система автоматизации сборки призвана сэкономить время разработчика при создании и сборке больших проектов. Говоря упрощенно, она представляет собой посредника между файлами исходного кода, с одной стороны, и компилятором и линковщиком — с другой. Система автоматизации сборки берет на себя задачу по запуску компилятора для каждого файла с исходным кодом, который создает объектный файл, и задачу вызова линковщика, когда все объектные файлы проекта получены.

На этом список функций системы автоматизации сборки не заканчивается, она позволяет автоматизировать выполнение таких рутинных действий, как:

  • Добавление новых файлов с исходным кодом в проект.
  • Конвертация полученного файла прошивки в другой формат.
  • Загрузка полученной прошивки в целевой микроконтроллер.

Это далеко не полный список преимуществ, которые дает применение системы автоматизации сборки [14]. Автор предлагает использовать систему автоматизации сборки QBS [13], основные черты которой:

QBS интегрирована в Qt Creator, нет необходимости в дополнительной установке и настройке.

Для описаний правил сборки используется декларативный QML-подобный язык, прямо в котором можно писать вставки на языке JavaScript.

Позволяет одновременно собирать проекты для разных платформ, например основной проект для микроконтроллера ARM Cortex-M, а вспомогательный, скажем, программа тестирования микроконтроллерного устройства, — для рабочей станции.

 

Проект-шаблон в Qt Creator

На данном этапе на виртуальную машину установлены следующие пакеты:

  1. Интегрированная среда разработки Qt Creator с интегрированной системой автоматизации сборки QBS.
  2. Инструментарий (компилятор, линковщик и др.) для сборки под STM32‑микро-контроллеры.
  3. Пакет утилит stlink для записи flash-памяти и отладки через программатор/отладчик ST-Link/V2.

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

  • Создавать приложения для микроконтроллеров STM32 на языках C и C++ в современном продвинутом редакторе с множеством облегчающих работу программиста функций.
  • Получать готовый для загрузки файл прошивки.
  • Автоматически загружать прошивки в целевой микроконтроллер.
  • Отлаживать приложение, работающее в целевом устройстве с богатыми возможностями визуализации, предоставляемыми средой Qt Creator.

Для этого можно использовать подготовленный автором проект-шаблон Qt Creator, загрузить который можно по адресу [17]. Проект предназначен для микроконтроллеров серии STM32F407, однако путем его незначительной модификации можно настроить его и для микроконтроллеров других серий. Проект используется в качестве шаблона при создании новых проектов — в него добавляются новые файлы исходных кодов.

Проект настроен так, что после успешной сборки (по нажатии Ctrl-B), когда включена конфигурация сборки «Выпуск», полученный файл прошивки автоматически загружается во flash-память микроконтроллера. Отладку же можно начать, предварительно выбрав конфигурацию сборки «Отладка», выполнив сборку и запустив приложение, нажав F5 или Ctrl-R.

Проект использует систему автоматизации сборки QBS, после загрузки проекта его можно открыть из Qt Creator, выбрав файл templ.qbs (имя файла можно заменить другим именем — это будет имя проекта). Далее следует выбрать для проекта настроенный ранее комплект для сборки — надо переключиться в Qt Creator в режим «Проекты», затем добавить комплект ARM Cortex-M, нажав «Добавить», после чего комплект Desktop удалить (рис. 24).

Выбор комплекта в Qt Creator

Рис. 24. Выбор комплекта в Qt Creator

Для автоматической прошивки может потребоваться задать корректный путь к утилите st-flash, путь следует задать в 102 строке qbs-файла:

var flashUtilityPath = “/home/andy/stlink.git/st-flash”;

Прежде чем приступать к добавлению файлов исходного кода, можно проверить работоспособность всех составных частей среды разработки. Для этого нужно убедиться, что программатор/отладчик ST-Link/V2 подключен к рабочей станции, а к нему подсоединен целевой микроконтроллер (автор работал с платой STM32F4Discovery). Далее выбрать конфигурацию сборки «Выпуск» и выполнить сборку, в результате в целевой микроконтроллер будет загружена простейшая программа, которая подает меандр на вывод PD12 с частотой в 1 Гц (на плате STM32F4Discovery начнет мигать зеленый светодиод).

Можно оценить возможности отладки приложения. Для этого надо выбрать конфигурацию сборки «Отладка», собрать проект и запустить его. Когда программа запустится в режиме отладки, можно убедиться в работоспособности точек останова, в возможности просмотра значения переменных программы и других возможностях отладки.

 

Структура проекта-шаблона

Для создания проекта-шаблона автор использовал проект из [8], из него взяты скрипты линковщика (каталог ldscripts), а также файлы startup_cm.c, startup_stm32f4xx.c, vectors_stm32f4xx.c (каталог TM32Cube/Drivers/CMSIS/Device/ST/STM32F4xx/Source/gcc), отвечающие за начальную инициализацию памяти и таблицы векторов прерываний. При написании qbs-файла за основу также был взят проект [8].

Остальные файлы из каталога STM32Cube получены программой STM32CubeMX, которую можно загрузить с [15]. Программа STM32CubeMX представляет собой удобнейший инструмент, позволяющий получить файлы исходного кода, описывающие инициализацию периферии любого микроконтроллера из семейства STM32, а также файлы библиотеки CMSIS, описывающей ядро ARM Cortex-M.

Кроме этого, программа STM32CubeMX генерирует исходный код, который устанавливает требуемую конфигурацию тактирования микроконтроллера, а также позволяет добавить в проект middleware-компоненты — например, операционную систему FreeRTOS или библиотеку FatFs для работы с накопителями, отформатированными в файловую систему FAT.

К сожалению, программа STM32CubeMX работает только с Windows, подробнее о ней можно прочитать в [16].

 

Структура QBS-файла

Отдельного внимания заслуживает qbs-файл, содержащий предписания для системы автоматизации сборки. Ниже приведен его листинг с комментариями, которые начинаются с «//». Если требуется собирать проект для микроконтроллера с другим ядром (например, ARM Cortex-M3), нужно заменить соответствующие флаги компилятора и линковщика, а также задать необходимые макроопределения.

Листинг qbs-файла с комментариями:

import qbs
import qbs.FileInfo
import qbs.ModUtils

Project {
  CppApplication {
    //	Обязательно добавляем тип “ucfw”, чтобы после сборки 
    // запускалось правило, которое выполнит «прошивку» МК
    type: [“application”, “ucfw” ]

    Depends { name: “cpp” }
    consoleApplication: true
    cpp.positionIndependentCode: false
    cpp.executableSuffix: “.elf”

    // Список каталогов, в которых размещаются заголовочные 
    // *.h файлы
    cpp.includePaths: [
      “app”,
      “STM32Cube/Inc”,
      “STM32Cube/Drivers/CMSIS/Device/ST/STM32F4xx/Include”,
      “STM32Cube/Drivers/CMSIS/Include”,
      “STM32Cube/Drivers/STM32F4xx_HAL_Driver/Inc”,
      “STM32Cube/Drivers/STM32F4xx_HAL_Driver/Inc/Legacy”,
    ]

    // Макроопределения (#define), которые автоматически 
    //	будут добавлены при компиляции
    cpp.defines: [
      “STM32F4XX”,
      “STM32F407xx”,
    ]

    // Флаги компилятора, здесь указывается тип ядра 
    // микроконтроллера, набор инструкций и т. д.
    cpp.commonCompilerFlags: [
      “-mcpu=cortex-m4”,
      “-mthumb”,
      “-mfpu=fpv4-sp-d16”,
      “-mfloat-abi=softfp”
    ]

    // Флаги линковщика
    cpp.linkerFlags: [
      “-mcpu=cortex-m4”,
      “-mthumb”,
      “-mfpu=fpv4-sp-d16”,
      “-mfloat-abi=softfp”,
      “-Xlinker”,
      “--gc-sections”
    ]


    // Уровень оптимизации задается в зависимости от типа сборки.
    // Оптимизация по размеру кода — только для типа сборки 
    // «Выпуск».
    Properties {
      condition: qbs.buildVariant === “debug”
      cpp.debugInformation: true
      cpp.optimization: “none”
    }
    Properties {
      condition: qbs.buildVariant === “release”
      cpp.debugInformation: false
      cpp.optimization: “small”
    }

    // Добавления макроопределение DEBUG, если тип сборки 
    // «Отладка».
    Properties {
      condition: cpp.debugInformation
      cpp.defines: outer.concat(“DEBUG”)
    }

    // Пути к скриптам линковщика
    cpp.linkerScripts: [
      “ldscripts/libs.ld”,
      “ldscripts/mem.ld”,
      “ldscripts/sections.ld”,
    ]

    // Группирование всех файлов с исходным кодом в группу 
    // “sources”
    Group {
      name: “sources”
      prefix: “./**/”
      files: [
        “*.c”,
        “*.cpp”,
        “*.h”,
        “*.s”
      ]
      // Задание флагов компилятора для файлов из группы 
      // “sources” — стандарт языка C и C++.
      cpp.cxxFlags: [ “-std=c++11” ]
      cpp.cFlags: [ “-std=gnu99” ]
      cpp.warningLevel: “all”
    }

    // Группирование всех скриптов линковщика в группу 
    // “ldscripts”
    Group {
      name: “ldscripts”
      prefix: “ldscripts/”
      files: “*.ld”
    }


    // Дальнейшая обработка результата сборки — файла 
    // с расширением *.elf
    Rule {
      id: elf_to_bin

      // Отключить правило для типа сборки «Отладка»
      condition: qbs.buildVariant === “release”

      inputs: [“application”]

      Artifact {
        fileTags: [“ucfw”]
            // !!!Обязательно должен совпадать с полем type 
            // итема CppApplication!!!
        filePath: input.baseDir + “/” + input.baseName + “.bin”
      }

      prepare: {
        // Преобразование из ELF-формата в BIN, который 
        // непосредственно можно «зашивать» в микроконтроллер.
        var objCopyPath = “arm-none-eabi-objcopy”;
            // имя утилиты objcopy
        var argsConv = [“-O”, “binary”, input.filePath, output.filePath];
            // аргументы утилиты
        var cmdConv = new Command(objCopyPath, argsConv);
        cmdConv.description = “converting to BIN: “ + FileInfo.fileName(input.filePath);
            // сообщение в Консоль сборки в Qt Creator
        cmdConv.highlight = “linker”;

        // “Прошивка” файла формата BIN в микроконтроллер 
        // утилитой st-flash
        var flashUtilityPath = “/home/andy/stlink.git/st-flash”;
            // полный путь к утилите st-flash
        var argsFlash = [“--reset”, “write”, output.filePath, “0x08000000”];
            // аргументы
        var cmdFlash = new Command(flashUtilityPath, argsFlash);


        cmdFlash.description = “flashig to uC: “ + FileInfo.fileName(output.filePath);
            // сообщение в Консоль сборки в Qt Creator
        cmdFlash.highlight = “linker”;

        // Выполнить сначала конвертацию в BIN, 
        // а затем «прошивку»
        return [cmdConv, cmdFlash];
      }
    }
  }
}

 

Заключение

Среда Qt Creator может быть настроена для разработки не только под микроконтроллеры ARM Cortex-M, но и под другие архитектуры, для которых существует инструментарий GCC (например, AVR от Atmel и MSP430 от Texas Instruments). В этом случае требуется создать новый комплект для сборки и указать пути к соответствующим компиляторам и GDB-отладчикам. Таким образом, сборку проектов настроить достаточно легко.

Для того чтобы настроить внутрисхемную отладку проекта, необходимо наличие сервера отладки (аналог пакета stlink, рассмотренного в статье), который будет взаимодействовать с отладчиком GDB из инструментария. Сервер отладки в свою очередь должен быть настроен на взаимодействие с аппаратным отладчиком, подключенным к рабочей станции.

Таким образом, среду Qt Creator можно рассматривать как универсальную для разработки под различные архитектуры микроконтроллеров.

Литература
  1. virtualbox.org/wiki/Guest_OSes
  2. virtualbox.org/wiki/Downloads
  3. Курниц А. uGFX — графическая библиотека для микроконтроллеров // Компоненты и технологии. 2015. № 4.
  4. dwheelerau.com/2014/01/25/setting-up-a-lubuntu-virtual-machine-with-virtual-box
  5. lubuntu.ru/download
  6. qt.io/ru/download-open-source/ #section-2
  7. master.virmandy.net/ustanovka-qt-i-qtcreator-v-ubuntu-14-04
  8. habrahabr.ru/post/222877
  9. www.launchpad.net/gcc-arm-embedded
  10. www.github.com/texane/stlink
  11. www.startingelectronics.org/tutorials/STM32-microcontrollers/programming-STM32-flash-in-Linux
  12. www.st.com/web/en/catalog/tools/PF260219
  13. www.opennet.ru/opennews/art.shtml?num=37069
  14. www.ru.wikipedia.org/wiki/Автоматизация_сборки
  15. www.st.com/web/catalog/tools/FM147/CL1794/SC961/SS1743/PF259242?sc=microxplorer
  16. www.compel.ru/lib/ne/2014/11/4-vizualizatsiya-vozmozhnostey-graficheskiy-generator-koda-stm32cubemx
  17. kit-e.ru/files/stm32f4disco_templ.zip

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *