Первый проект для STM32 с HAL в переполнении стека

Я хотел бы создать проект для STM32 с HAL на C ++.
К сожалению, CubeMX поддерживает только проекты на C. Однако HAL поддерживает C ++.

Я создал проект в CubeMX и пытался импортировать его в любую из вышеупомянутых IDE, но безуспешно, потому что он был импортирован как C-проект. Так что это не выглядит хорошим решением.

Также я попытался создать проект C ++ в упомянутой IDE и добавить к нему файлы из CubeMX. Это кажется более логичным, но я не могу сделать это правильно, потому что моя конфигурация все еще неверна.

Может кто-нибудь объяснить мне, как я должен настроить новые проекты C ++ в Eclipse или Atollic TrueSTUDIO для использования HAL?

7

Решение

Последние версии CubeMX поддерживают System Workbench 4 STM32, которая является интегрированной средой разработки на основе Eclipse, предварительно настроенной для разработки для целей STM32. Он имеет возможность конвертировать проект в C ++ (щелкните правой кнопкой мыши проект в проводнике проекта, затем выберите «Преобразовать в C ++»).

Обратите внимание, что у меня нет прямого опыта использования этого метода. Мы используем STM HAL и создаем наши приложения C ++ поверх этого, так что это определенно возможно, но наша IDE — это Keil, так что YMMV.

6

Другие решения

Как преобразовать сгенерированный STM32CubeMX проект Atollic Eclipse C в C ++ (3 шага):

  • Скопируйте main.c в main.cpp и исключите main.c из сборки. Результат: пока не работает. Хотя main.cpp может появиться в списке файлов проекта Eclipse, он даже не начинает компилироваться (не распознает очевидные синтаксические ошибки), и есть ошибки компоновщика для отсутствующего main ().
  • Затем добавьте org.eclipse.cdt.core.куб.смприрода в .project файл с текстовым редактором, как это …

    <natures>
    <nature>org.eclipse.cdt.core.cnature</nature>
    <nature>org.eclipse.cdt.core.ccnature</nature>

    Увидеть http://www.openstm32.org/forumthread1244. Это можно сделать, когда Eclipse работает с открытым проектом. Результат: main.cpp компилируется, но не может найти включаемые файлы, потому что пути включения неверны. Вы бы подумали CPPприрода было бы лучшим именем.
    Изменить: поиск справки Eclipse для «C ++ nature» для получения советов о том, как добавить C ++ nature, используя меню File / New / Other / Convert to C / C ++ Make Project.
  • Затем измените настройки проекта, чтобы дублировать соответствующие настройки C на настройки C ++ — как показано здесь. введите описание изображения здесь Проект должен быть закрыт и повторно открыт, чтобы изменения вступили в силу. Результат: сборки, ссылки, работает и работает правильно. main.cpp может выполнять вызовы кода HAL c, а обратные вызовы HAL могут вызывать функции в файлах .cpp. В файлах .cpp может потребоваться внешний модификатор «C», если 1 сторона .cpp вызывает функцию на стороне .c (измените прототипы функций, предварительно ожидая defined extern "C" 2 .сторона c вызывает callback, определенный в .cpp (измените определение функции на стороне .cpp, предварительно ожидая defined extern "C",

Некоторые заметки:

  • Если я когда-нибудь заново сгенерирую код с помощью CubeMX (например, для изменения конфигурации часов или выводов), main.c будет обновлен, а main.cpp — нет, поэтому необходимо объединить изменения / различия из файла .c в файл .cpp.
  • Как быть уверенным в том & Настройки C ++ эквивалентны: после сборки посмотрите на окно консоли и сравните вызов командной строки для gcc и g ++, чтобы убедиться, что соответствующие параметры (пути, -D и т. Д.) Идентичны.
  • Можно (но рискованно) отредактировать XML-файл Eclipse .cproject и реплицировать настройки C на сторону C ++ (конкретные детали здесь опущены — но закройте проект в Eclipse перед редактированием файла .cproject).
  • Что касается возражений против «раздувания» CubeMX / HAL: CubeMX генерирует код и проектирует очень быстро. Если HAL API работает медленно, например, доступ через порт GPIO, просто замените вызов API новой пользовательской функцией, содержащей более простое подмножество того, что делает этот раздутый API. Я делаю это часто в критичном ко времени коде.
  • Я использую CubeMX (4.14.0) и Atollic (v6.0.0 Lite). Я не видел вариант проекта для преобразования в C ++ в Atollic Eclipse, хотя я видел этот вариант в других средах Eclipse, например, Xilinx Eclipse.

Возможности для улучшения: возможно, существует шаблон CubeMX, который можно отредактировать, чтобы сделать эти изменения более автоматическими, но я не знаю достаточно о шаблонах CubeMX, чтобы сделать этот взлом более элегантным.

Я также использую CubeMX с IAR EWARM и прохожу аналогичный (но немного более простой) процесс для преобразования в проект .cpp.

4

В зависимости от того, какой это чип STM32, он может поддерживаться mBed. Онлайновый компилятор mBed позволяет экспортировать в различные IDE. Новый автономный (yotta) использует cmake, который также может экспортироваться в некоторые IDE. К сожалению, на данный момент Yotta поддерживает только пару чипов.

-1
По вопросам рекламы [email protected]