Попробую опубликовать. Вдруг зайдёт.
Примечание: Предусматривается, что компьютер знают все и рассказывать где какая кнопка находится я не буду.
Среда разработки: CubeMX, CubeIDE. Всегда последней версии.
Микроконтроллеры: Серия STM32
Для начала я покажу, как у меня организовано дисковое пространство. Это не догма. Просто мне так удобнее. Каждый сам для себя должен решить как ему удобнее. Но последующие статьи я буду писать со ссылкой именно на такую организацию.
Создание проекта.
Загружаем CubeMX и вибираем нужный нам МК.
После загрузки проекта открываем main.c
В каталоге Src оставляем только те файлы, которые на картинке. В каталоге Drivers удаляем весь подкаталог STM32F4xx_HAL_Driver.
Вверху выбираем All Configurations и грохаем USE_HAL_DRIVER
Статья - 01
Как избавиться от HAL и перейти на С++
ООП на STM32
В интернете очень много информации, но по теме ООП+STM32 я её встречал мало. В серии статей я попытаюсь рассказать, как я пришёл к ООП ни как к таковому и именно на микрокотроллерах от фирмы ST. Это не моё НоуХау. Это то, что я сумел собрать для себя и то, чем я пользуюсь для облегчения программирования в своих разработках.Как избавиться от HAL и перейти на С++
ООП на STM32
Примечание: Предусматривается, что компьютер знают все и рассказывать где какая кнопка находится я не буду.
Среда разработки: CubeMX, CubeIDE. Всегда последней версии.
Микроконтроллеры: Серия STM32
Для начала я покажу, как у меня организовано дисковое пространство. Это не догма. Просто мне так удобнее. Каждый сам для себя должен решить как ему удобнее. Но последующие статьи я буду писать со ссылкой именно на такую организацию.
Все свои проекты я храню в каталоге WorkDevel.
Он содержит подкаталоги:- AltiumLib - библиотеки Altium Designer;
- Datasheet - Даташиты на электронные компоненты;
- Developer - Каталог хранящий все проекты;
- Project_Lesson_01 - это тот каталог в котором мы с вами будем работать;
- Code_CPP - здесь будут подкаталоги с нашим кодом. На больших проектах там может быть не один каталог.
- Output - Сюда я вывожу Gerber файлы для заказа их в Китае;
- Pcad - Здесь хранятся проекты схем и плат. Так же как и в Code_CPP, на больших проектах можен содержать несколько подкаталогов;
- Source - Сюда складываю первичную информацию. Техзадания, даташиты на элементы учавствующие именно в этом проекте. И так далее
- STM32Lib - Каталог где хранятся библиотеки и программные ядра на каждый тип микроконтроллера.
- Device - Библиотеки зависимые от типа ядра МикроКонтроллера (МК);
- Library - Библиотеки, независимые от типа MK.
Так как я работаю на разных компьютерах, данная структура позволяет мне переносить проекты с компьютера на компьютер без потери данных и не заморачиваться каждый раз где что лежит и не важно, какая буква присвоена диску. Даже на те, которые не подключены к интернету.
Вот теперь можно приступить.
Примечание: То, что я буду давать, будет применимо к любому ядру МК. В случае, если есть какие то отличия между ядрами в инициализации периферии, я постараюсь на этом заострять внимание.
Вы можете проделать показанные мною операции для любого ядра МК. Я же покажу всю цепочку на STM32F407VET6. Так как для него у меня более полные библиотеки. Но никто не мешает вам взяв его библиотеки за пример дописать свои.Создание проекта.
Загружаем CubeMX и вибираем нужный нам МК.
Никакую периферию мы не инициализируем, а сразу идём на закладку ProjectManager
Здесь нас интересуют только три поля:
- Project Name - Имя проекта. Вводим имя, по которому будем идентифицировать проект.
- Project Location - Выбираем каталог, в котором будет хранится наш проект. В данном случае c:\WorkDevel\Developer\Project_Lesson_01\Code_CPP\
- Toolchain/IDE - Выбираем STM32CubeIDE.
Затем слева выбираем Code Generator и ставим галку напротив первого пункта в разделе Generated files.
В данном проекте нам она погоды не сделает, но привычка позволит в более сложных проектах разбивать функции инициализации периферии по отдельным файлам. Что весьма удобно. (Почему то не все это любят. Есть такие, что пишут портянки по 5000 строк в одном файле. А можно было разбить код на отдельные логически блоки и раскидать их по файлам.)
Подготовка закончена. Генерируем код. (Кнопка справа вверху "Generate Code")
Нам предлагается или открыть каталог с проектом, или открыть его сразу в IDE, или всё на этом. Выберем открытие проекта. Загружается выбранная IDE. В нашем случае CubeIDE.
После загрузки проекта открываем main.c
Пробуем компилить. Никаких ошибок быть не должно.
Теперь начинаем методично уничтожать HAL.
В каталоге Inc удаляем все файлы.В каталоге Src оставляем только те файлы, которые на картинке. В каталоге Drivers удаляем весь подкаталог STM32F4xx_HAL_Driver.
В main.c удаляем всё, кроме указанного на картинке.
Идём в меню Project->Properties->C/C++ Build->Settings
Закладка Tool Settings, MCU GCC Compiler-> PreprocessorВверху выбираем All Configurations и грохаем USE_HAL_DRIVER
Нажимаем Apply. И дём в Include Paths. Там удаляем всё упоманание о Hal.
Нажимаем Apply и Apply and Close
Пытаемся компилить и получаем одно предупреждение. Необходимо эту строку заккоментировать. Не удалять ни в коем случае. Она позже вам пригодится.Нажимаем правой кнопкой на проекте и выбираем конвертацию в С++
Вроде визуально ничего не изменилось. Но если посмотреть здесь
У нас появился новый пункт: MCU G++ Compiler
Переименовываем main.c в main.cpp и пробуем компилить.Выдаётся такая ошибка.
Ничего страшного. Идём сюда и выбираем Clean Project.
Компилируем снова и получаем 0 ошибок.
На этом пока всё. Позже покажу как подключать библиотеки находящиеся в STM32Lib
Вложения
-
1,001.9 KB Просмотры: 6