Если вы как я любитель писать на C++ для микроконтроллеров STM32, то наверняка в курсе данной проблемы, а именно то, что при использовании утилиты CubeMX генерируется HAL проект только с поддержкой Си, тогда как HAL в принципе поддерживает C++.
Я использую Atollic TrueSTUDIO в разработке и соответственно импорт из CubeMX делаю в него и в итоге получаю Си проект с HAL. Но у меня овердофига готовых классов на C++, которые я хочу добавить в проект, и мне нужен проект C++. Сконвертировать проект на самом деле не сложно и делается это в 3 простых шага:
- Для начала копируем содержимое main.c в main.cpp и удаляем main.c (Важно, не пытайтесь оставить оба файла в проекте).
- Далее добавьте в .project файл проекта в секцию <natures> строку <nature>org.eclipse.cdt.core.ccnature</nature>
- Следующим шагом дублируем соответствующие настройки Си проекта в C++ как показано ниже:

Собственно тоже самое проделывается с настройками Symbols, Optimiztion и т.д., если есть необходимость.
Теперь проект просто необходимо закрыть и открыть заново. чтобы изменения вступили в силу. В результате получаем: все компилируется и линкуется без ошибок, отладка работает корректно, из main.cpp вызывается HAL код и HAL callback функции могут вызываться в .cpp файлах.
Модификатор extern «C» может быть необходим в .cpp файлах, если .cpp сторона вызывает функции на стороне .c кода или из .c кода вызывается callback функция, определенная в .cpp файле.
Если вы выполняете повторную генерацию проекта из CubeMX для внесения изменений данные изменения попадут в main.c и не попадут в main.cpp, поэтому необходимо их вносить вручную.
На этом вроде все, если когда-нибудь появится хак, который будет делать все это автоматически будет очень неплохо, а пока делаю все ручками)
Спасибо, что дочитали до конца. Подписывайтесь на мой канал в telegram, чтобы не пропустить анонсы новых статей.
А где в берете готовые классы на C++ для stm32?
Нигде, классы я пишу сам.
Кнопки соцсетей закрывают часть текста слева, невозможно читать…
чтобы эта дрянь пропала, подведите к ней снизу курсор, появится серая стрелочка влево, давите ее мышом.
В SW4STM32 можно было просто сконвертировать СИ проект в С++. Жаль что здесь нельзя.
я просто меняю расширение файла в кубике. пока, вроде, все хорошо. Хотелось бы чтобы сгенерированные файлы были С++