Создание приложений STM32 с Eclipse, GCC и STM32Cube

  1. Почему выбирают Eclipse / GCC в качестве цепочки инструментов для STM32
  2. Резюме всего процесса
  3. Допущения и требования
  4. Создать пустой проект
  5. Импорт STM32Cube-HAL в проект Eclipse
  6. Что дальше?
  7. Заключение
Пожалуйста, прочитайте внимательно.

Благодаря отзывам, которые я получил, я пришел к выводу, что действительно трудно освещать такую ​​тему в комнате блога. Итак, я начал писать книгу о платформе STM32. В бесплатном образце книги вы можете найти более полную объяснение всей процедуры. Вы можете скачать его отсюда ,

Если вы попали на эту страницу, вы, вероятно, уже знаете, что я освещал эту тему в прошлом. Я показал в серии из трех постов как успешно настроить полную цепочку инструментов Eclipse / GCC ARM для разработки приложений для развивающей платы STM32Nucleo-F4. С тех пор многие люди сообщили мне положительные отзывы об этом уроке. Но у некоторых из них были серьезные проблемы с выполнением этих инструкций для других семейств STM32 (F0, F1 и т. Д.). Это было в основном вызвано Подключаемый модуль GNU ARM Eclipse Или, скорее, с помощью включенных шаблонов в плагин. При создании нового проекта с помощью мастера подключаемых модулей используется шаблон в зависимости от семейства процессоров. К сожалению, автор плагина обновил только шаблон для семейства STM32-F4 до более поздней платформы STM32Cube-F4 HAL от ST (которая все еще поддерживает только коммерческую IDE .....), оставляя другие шаблоны по-прежнему на основе Старая стандартная периферийная библиотека, которая больше не поддерживается инструментами ST и STM32CubeMX, использованными в моем руководстве. Это приводит к тому, что мои инструкции неверны для семейств процессоров, отличных от STM32-F4.

В этой статье я покажу вам, как с нуля настроить проект Eclipse для разработки приложений для платформы STM32 с использованием последней версии платформы STM32Cube-Fx (последняя версия, доступная на момент написания, - 1.6 для F4). К сожалению, на данный момент я могу протестировать эти инструкции только на процессоре STM32-F4, но я собираюсь купить другие платы Nucleo для проведения тестов. В этой статье я не буду объяснять снова все шаги, необходимые для установки Eclipse и GCC на ваш компьютер. Если вы еще не установили базовую цепочку инструментов, вы можете начать чтение с эта почта и остановимся на абзаце под названием « Создать тестовый проект ». Когда будете готовы, вы можете вернуться сюда снова и продолжить чтение.

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

Почему выбирают Eclipse / GCC в качестве цепочки инструментов для STM32

Это действительно распространенный вопрос: какая цепочка инструментов является лучшей для разработки приложений для STM32? К сожалению, на этот вопрос не так просто ответить. Вероятно, лучший ответ заключается в том, что это зависит от приложения. Прежде всего, аудиторию следует разделить на профессионалов и любителей. Компания часто предпочитает использовать коммерческие IDE с ежегодными взносами, которые позволяют получать техническую поддержку. Вы должны понять, что в рабочее время означает деньги, а иногда и коммерческая среда IDE может уменьшить кривую обучения (особенно если учесть, что ST явно поддерживает эти среды). Тем не менее, я думаю, что даже компании (особенно если они небольшие организации) могут получить большие преимущества в использовании цепочки инструментов с открытым исходным кодом.

По моему мнению, это наиболее важные преимущества в использовании цепочки инструментов Eclipse / GCC для разработки встраиваемых систем с MCU STM32:

  • Он основан на GCC : GCC, вероятно, лучший компилятор в мире, и он дает отличные результаты даже с процессорами на базе ARM. В настоящее время ARM является наиболее распространенной архитектурой (благодаря распространению встроенных систем в последние годы), и GCC используется многими производителями оборудования и программного обеспечения в качестве основы для своей платформы.
  • Он кроссплатформенный : если у вас есть ПК с Windows, новейший сексуальный Mac или сервер Linux, вы сможете без труда разрабатывать, компилировать и загружать прошивку на свою плату для разработки. Сегодня это не второстепенный аспект.
  • Распространение Eclipse : многие коммерческие IDE для STM32 (такие как TrueSTUDIO и другие) также основаны на Eclipse, который становится своего рода стандартом. Существует множество полезных плагинов для Eclipse, которые вы можете скачать одним щелчком мыши. И это продукт, который развивается день ото дня.
  • Это с открытым исходным кодом : хорошо. Согласен. Для таких гигантских программ действительно сложно попытаться понять их внутреннее устройство и изменить код, особенно если вы инженер по аппаратному обеспечению, который занимается транзисторами и управлением прерываниями. Но если у вас проблемы с инструментом, проще понять, что не так с инструментом с открытым исходным кодом, чем с закрытым.
  • Большое и растущее сообщество : к этим инструментам к настоящему времени присоединилось большое международное сообщество, которое постоянно разрабатывает новые функции и исправляет ошибки. Вы найдете около тонны примеров и сообщений в блоге, как этот, которые могут помочь вам во время вашей работы. Более того, многие компании, внедрившие это программное обеспечение, вносят экономический вклад в основное развитие. Это гарантирует, что программное обеспечение не исчезнет внезапно.
  • Это бесплатно : да. Я поставил это в качестве последнего пункта, но это не последнее. Коммерческая IDE может стоить целое состояние для небольшой компании или любителя. А наличие бесплатного инструмента - одно из ключевых преимуществ платформы STM32.

Хорошо. Теперь мы можем начать делать серьезные вещи 🙂

Резюме всего процесса

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

  • Сначала мы генерируем пустой скелет для процессоров ARM Cortex-M;
  • Затем мы поместим в нужное место всю библиотеку HAL, разработанную ST;
  • Затем мы настраиваем некоторые макросы проекта и файлы запуска ассемблера;
  • Наконец, мы добавляем пример main, чтобы проверить, все ли хорошо.

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

Допущения и требования

В этом уроке я предполагаю, что у вас есть:

  • Полная цепочка инструментов Eclipse / GCC ARM с необходимыми плагинами, как описано в этом посте , Я предполагаю, что вся цепочка инструментов установлена ​​в C: \ STM32Toolchain или ~ / STM32Toolchain, если у вас UNIX-подобная система.
  • Каркас STM32Cube-F4 от ST уже загружен и извлечен (если ваша плата основана на другом семействе STM32, загрузите соответствующий пакет STM32Cube - я почти уверен, что инструкции полностью совместимы).
  • Плата STM32Nucleo-F401RE (как я уже говорил, составьте инструкции для вашего Nucleo, если он другой). Я думаю, что также легко организовать эту процедуру для других плат, например, для более распространенного STM32Discovery.

Создать пустой проект

Первый шаг - создание каркасного проекта, в который мы поместим библиотеку HAL из ST. Итак, запустите Eclipse и перейдите в File-> New-> C Project и выберите «Hello World ARM Cortex-M C / C ++ проект. Вы можете выбрать желаемое имя проекта (я выбрал« test1 »). Нажмите« Next » ,

На следующем шаге вы должны настроить свой процессор На следующем шаге вы должны настроить свой процессор. Для STM32-F4 вы должны выбрать ядро ​​Cortex-M4, а для STM32-F1 - Cortex-M3. Параметры Clock, Flash и RAM зависят от вашего Nucleo MCU. Для Nucleo-F401RE вы можете использовать те же значения, как показано на следующем рисунке. Установите другие параметры, как показано ниже . На следующем шаге оставьте все параметры без изменений, кроме последнего: имя CMSIS поставщика . Измените его с DEVICE на stm32f4xx, если у вас есть плата на основе STM32F4, или stm32f1xx для плат F1 и так далее. Нажмите « Далее ». Вы можете оставить параметры по умолчанию в следующих шагах. Последний шаг о цепочке инструментов GCC. Вы можете использовать эти значения:

название цепочки инструментов: GNU Tools для встроенных процессоров ARM (arm-none-eabi-gcc)
путь цепочки инструментов: C: \ STM32Toolchain \ gnu-arm \ 4.8-2014q3 \ bin

Нажмите « Готово ».

Теперь, если вы впервые вступаете в контакт с Eclipse IDE, вы можете немного запутаться из-за его интерфейса. Eclipse - это многооконный IDE, и окна могут быть организованы в несколько групп, называемых перспективными , как они называются в Eclipse. Цель этой статьи - объяснить, как работает Eclipse. Я предлагаю вам поиграть с кнопками, отмеченными красным на следующем изображении. Теперь, если вы впервые вступаете в контакт с Eclipse IDE, вы можете немного запутаться из-за его интерфейса После нескольких кликов вы должны получить интерфейс, близкий к тому, что показан на следующем рисунке.

Импорт STM32Cube-HAL в проект Eclipse

Хорошо. Теперь начинается самое сложное. Проект, сгенерированный подключаемым модулем GNU ARM для Eclipse, представляет собой каркас, содержащий стандарт программного интерфейса Cortex Microcontroller (CMSIS) от ARM. CMSIS является независимым от производителя уровнем аппаратной абстракции для процессоров серии Cortex-M. Он обеспечивает согласованные и простые программные интерфейсы с процессором для интерфейсных периферийных устройств, операционных систем реального времени и промежуточного программного обеспечения. Он предназначен для упрощения повторного использования программного обеспечения и сокращения обучения. Однако пакета CMSIS недостаточно для начала программирования с использованием микросхемы STM32. Это также требует определенного аппаратного уровня абстракции (HAL). Это то, что ST предоставляет со своей структурой STM32Cube.

Приведенная выше схема пытается лучше объяснить все компоненты, участвующие в финальной генерации прошивки. CMSIS - это универсальный набор функций, разработанный ARM, и он является общим для всех поставщиков Cortex-M (ST, ATMEL и т. Д.). ST HAL - это уровень аппаратной абстракции, разработанный ST для своих конкретных устройств и относящийся к семейству STM32 (F0, F1 и т. Д.). Устройство HAL является своего рода «соединителем», который позволяет двум подсистемам общаться друг с другом. Это действительно упрощенное представление, но этого достаточно, чтобы начать программирование с этой архитектурой.

Давайте посмотрим на сгенерированный проект.

Давайте посмотрим на сгенерированный проект

  • Папки / src и / include содержат наше «основное» приложение. Плагин сгенерировал голый файл main.c. Мы не используем эти файлы, как мы скоро увидим, но мы поместим пример «main» в эту папку.
  • Папка / system по существу содержит пакет ARM CMSIS.
  • / system / include / stm32f4xx и / system / src / stm32f4xx - это папки, в которые мы поместим HAL STM32Cube.
  • / ldscripts содержит скрипт для редактора ссылок GNU (ld). Эти сценарии инструктируют компоновщик разделить память и выполнить несколько действий по настройке прерываний и подпрограмм точки входа.

Давайте теперь посмотрим на подпапку cortexm.

Файлы, которые я выделил синим цветом на картинке выше, автоматически генерируются плагином GNU ARM Eclipse. Это то, что на предыдущей диаграмме называется частью устройства HAL. Эти файлы практически пусты и должны быть заменены пользовательским кодом, специфичным для одного поставщика (в нашем случае ST), специфичным для данного MCU (STM32F401RE, если у вас есть Nucleo, подобный моему). Мы собираемся удалить их.

Итак, первым шагом является загрузка последней версии STM32Cube-F4 (или тот, который соответствует вашему MCU) с веб-сайта ST, распакуйте его и поместите в папку C: \ STM32Toolchain. После извлечения переименуйте папку из STM32Cube_FW_F4_V1.6.0 в STM32Cube_FW_F4.

Затем перейдите в проект Eclipse и удалите следующие файлы:

  • /src/[main.c, Timer.c]
  • /include/Timer.h
  • /system/include/cmsis/[stm32f4xx.h,system_stm32f4xx.h]
  • /system/src/cmsis/[system_stm32f4xx.c,vectors_stm32f4xx.c]

Теперь нам нужно скопировать HAL и другие файлы из STM32Cube в проект Eclipse.

Хорошо. Фреймворк по сути настроен. Теперь нам нужен пример проекта, который показывает нам, что все работает хорошо. Мы возьмем пример с мигающим светодиодом от ST.

Перейдите в папку STM32Toolchain / STM32Cube_FW_F4 / Projects / STM32F401RE-Nucleo / examples / GPIO / GPIO_IOToggle / Inc и скопируйте ВСЕ содержимое в папку Eclipse / include . Затем перейдите в папку STM32Toolchain / STM32Cube_FW_F4 / Projects / STM32F401RE-Nucleo / examples / GPIO / GPIO_IOToggle / src и скопируйте только файлы main.c и stm32f4xx_it.c внутри папки Eclipse / src . Наконец, ST разделил этапы настройки конкретной платы Nucleo в другом пакете, называемом Board Support Package (BSP). Перейдите в STM32Cube_FW_F4 / Drivers / BSP / STM32F4xx-Nucleo и скопируйте stm32f4xx_nucleo.c в папку / src в Eclipse и файл stm32f4xx_nucleo.h в папке / include Eclipse.

Мы почти в конце всей процедуры. Нам нужно только настроить пару вещей. Во-первых, мы должны объявить, какой MCU мы используем, определяя глобальный макрос внутри конфигурации проекта. Для Nucleo-F401RE макрос - это STM32F401xE. Зайдите в свойства проекта (в главном меню Eclipse перейдите в Project-> Properties ), затем C / C ++ Build-> Settings . Нажмите « Настройки инструмента» и перейдите в Cross ARM C Compiler-> Preprocessor . Нажмите на иконку Добавить ( Мы почти в конце всей процедуры ) и добавьте макрос STM32F401xE.

Нажмите на иконку Добавить (   ) и добавьте макрос STM32F401xE

Во-вторых, нам нужно настроить отображение приложения в памяти MCU. Эта работа выполняется редактором ссылок (ld), который использует три файла .ld в папке Eclipse / ldscripts. Нас интересует файл mem.ld, и нам нужно изменить адрес источника FLASH с 0x00000000 на 0x08000000, как показано ниже:

, , ,

FLASH (rx): ORIGIN = 0x08000000, ДЛИНА = 512K

, , ,

Откуда этот номер? Это не волшебное число. Это просто адрес, по которому внутренняя вспышка MCU отображается во всех микроконтроллерах STM32, как вы можете видеть на рисунке ниже, извлеченном из таблицы данных MCU.

Это просто адрес, по которому внутренняя вспышка MCU отображается во всех микроконтроллерах STM32, как вы можете видеть на рисунке ниже, извлеченном из таблицы данных MCU

Законченный. Теперь вы можете скомпилировать проект, перейдя в Project-> Build All .

Что дальше?

Если вы совершенно новичок в процессе разработки Eclipse / GCC для STM32, вам нужно вернуться назад на этот пост и продолжить чтение из параграфа « Давайте скомпилируем тестовый проект ». Вам нужно пропустить чтение из параграфа « Адаптируйте тестовый код к плате Nucleo », так как код, который мы здесь использовали, уже предназначен для нашего Nucleo. Закончив, вы можете начать читать часть 2 а также 3 из этой серии полностью.

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

Заключение

Я осознаю тот факт, что вся процедура не проста, но я могу гарантировать вам, что это станет ясно после первого раза. Я сделал все возможное, чтобы описать весь процесс простым и понятным способом, но комментарии и предложения приветствуются.

Теперь вы можете приступить к программированию вашего Nucleo и погрузиться в каркас STM32Cube. Наслаждайтесь своим Nucleo!

Что дальше?

Дополнительная информация

rss
Карта