Развертывание среды разработки для STM32

Большая часть статьи — это текстовое описание видео: 

В статье показано, как с помощью бесплатных кроссплатформенных инструментов развернуть среду разработки для микроконтроллеров STM32.

Программы и библиотеки, о которых будет идти речь, уже объединены в готовые бесплатные среды разработки, например CooCox CoIDE или SW4STM32. Первая только для Windows, а вторая для множества операционных систем, но ссылки для скачивания появляются только после регистрации.

Мы соберем свою среду, чтобы лучше ее понимать и контролировать.

Eclipse

Грубо говоря, Eclipse — это продвинутый редактор кода. Eclipse никак не привязан к STM32 и с его помощью можно вести разработку на разных языках программирования и для разных целей.

Перейдем на страницу загрузки пакетов Eclipse и скачаемEclipse IDE for C/C++ Developers.

Установка заключается в распаковке скаченного архива в удобное место. На Windows я устанавливаю Eclipse в папку Program Files, на Linux — в /opt, то же самое с любыми другими программами и библиотеками у которых нет установочного файла.

Программа запускается с помощью исполняемого файлаeclipse, который находится в распакованной папке. При первом запуске надо будет выбрать рабочую папку. В этой папке Eclipse будет по умолчанию создавать проекты. Этот выбор не ограничивает местоположение проектов, их можно размещать в любом другом месте.

При первом запуске будет открыта вкладка Welcome, которую нужно просто закрыть.

GCC ARM

GCC ARM — это набор инструментов для сборки программы, таких как компилятор, линковщик, отладчик и много другое. GCC ARM имеет косвенное отношение к STM32 и позволяет разрабатывать программы под любые ARM-процессоры.

Идем на официальный сайт и выбираем версию для своей операционной системы.

Просто распаковываем архив в удобное место.

GNU ARM Eclipse

GNU ARM Eclipse — это дополнение для Eclipse, которое поможет связать его с GCC ARM.

Для его установки запустим Eclipse и выберем меню Help -> Install New Software:

eclipse-help-install-new-software

В появившемся окне нажмем кнопку Add, чтобы добавить источник дополнения.

В поле Name укажем имя источника «GNU ARM Eclipse Plug-ins», а в поле Location ссылку на источник: http://gnuarmeclipse.sourceforge.net/updates

eclipse-add-repository-gnu-arm-eclipse-plug-ins

После нажатия OK необходимо немного подождать пока в таблице загрузится список пакетов.

Ставим галочку напротив GNU ARM C/C++ Cross Development Tools и нажимаем Next.

Затем проходим процедуру установки нажимая Next и соглашаясь с условиями лицензии.

Установка займет некоторое время. В какой-то момент в диалоговом окне появится вопрос, продолжить ли установку неподписанного содержимого, смело жмем OK.eclipse-security-warning

В конце установки будет предложено перезапустить Eclipse. Соглашаемся.

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

Теперь есть все необходимое, чтобы создать проект.

Чтобы создать проект на языке C, выберем меню File -> New -> C Project.

eclipse-file-new-c-project

Можно создать проект на языке C++, но возникнет множество нюансов, которые усложнят разработку. О них я расскажу в другой статье.

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

Проект я назову example. Тип — пустой проект (Empty Project). Набор инструментов — Cross ARM GCC, что соответствует ранее установленному GCC ARM.eclipse-c-project

После нажатия Next будет предложено выбрать конфигурации проекта. Конфигурации позволяют по разному собирать проект, с разными настройками. В дальнейшем можно создать любое количество конфигураций. Но придется возиться с их настройками. Для простоты оставим одну конфигурацию Release.

eclipse-select-configurations

Далее будет предложено уточнить набор инструментов и указать путь к ним. По умолчанию выбран набор GCC ARM: «GNU Tools for ARM Embedded Processors (arm-none-eabi-gcc)«. В качестве пути нужно указать путь к папке GNU ARM.

eclipse-toolchain

После нажатия Finish проект будет создан. Его иерархическая структура отображается во вкладке Project Explorer. В этой же вкладе может отображаться множество проектов.

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

Чтобы собрать проект, необходимо создать хотя бы один файл с исходным кодом. Создадим файл main.c c функциейmain().

Вызовем контекстное меню на имени проекта и выберемNew -> Source File.eclipse-new-source-file

В поле Source File укажем имя файла main.c и нажмем Finish.eclipse-new-source-file

В файл добавим следующий код:

1
2
3
4
5
int main() {
    while(1);
 
    return 0;
}

Сохраним файл комбинацией Ctrl+S. И соберем проект комбинацией Ctrl+B или нажав на иконкуeclipse-%d0%b8%d0%ba%d0%be%d0%bd%d0%ba%d0%b0-build

Eclipse может автоматически сохранять файлы перед сборкой, но для это нужно выбрать менюWindows -> Preferences, перейти в General -> Workspaces и поставить галочку напротив Save automatically before built.

При сборке проекта мы получим ошибку, потому что не хватает двух библиотек (CMSIS и STM32Cube), о которых далее пойдет речь.

CMSIS

CMSIS — это базовая библиотека для ARM-микроконтроллеров.

Ее можно скачать с сайта ARM после регистрации.

CMSIS распространяется в виде архива, который нужно распаковываем в удобное место.

Подключение библиотеки будет разобрано в соответствующем разделе далее.

В CMSIS есть папка

Device/ARM/ARMCMx/Source/GCC/

Есть несколько папок ARMCMx, которые соответствуют разным ядрам микроконтроллеров. Имя папки расшифровывается как ARM Cortex-M. Выбираем папку в соответствии с микроконтроллером.

Из этой папки в папку проекта требуется скопировать пару файлов:

  • gcc_arm.ld
  • startup_ARMCMx.c

Чтобы файлы появились в Eclipse, нажмите F5 в Project Explorer, либо в контекстном меню проекта выберете Refresh. Это обновит список файлов.

Оба файла придется отредактировать.

gcc_arm.ld

Это скрипт для линковки проекта. Он отвечает за распределение разных областей памяти в микроконтроллере.

В этом файле задается объем постоянной и оперативной памяти микроконтроллера, а также их начальные адреса. Эти параметры нужно отредактировать в соответствии с используемым микроконтроллером.

Параметры задаются в самом начале файла с помощью следующего кода:

1
2
3
4
5
6
/* Linker script to configure memory regions. */
MEMORY
{
  FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x40000   /* 256k */
  RAM (rwx)  : ORIGIN = 0x20000000, LENGTH = 0x08000   /*  32k */
}

В переменной ORIGIN задается начальный адрес области памяти, а в LENGTH — ее объем в байтах. FLASH — это постоянная память, RAM — оперативная.

В STM32 начальный адрес постоянной памяти — 0x08000000, оперативной (как и указано) — 0x20000000.

startup_ARMCMx.c

Это файл с исходным кодом на языке C, который содержит базовый код программы и таблицу прерываний. Кроме того в файле задается объем стека&

-->
X
Обратный звонок