Примечание: Предусматривается, что компьютер знают все, и рассказывать, где какая кнопка находится, я не буду.
Среда разработки: CubeMX, CubeIDE. Всегда последней версии.
Микроконтроллеры: серия STM32.
В прошлой статье я показал файловую структуру проекта. Чтобы не возникало вопросов, объясню почему я пришёл именно к такой структуре:
- Все проекты хранятся в одном каталоге.
- В каждом каталоге содержится всё, что относится к нему: схемы, платы, техническое задание, код, исходные и справочные материалы.
- Библиотеки для МК.
Сначала, когда я только начинал, я копировал библиотеки в каталог с кодом. Но, когда количество проектов и МК сильно увеличилось, я начал путаться в библиотеках. Часть из них усовершенствовал, часть изменил, а растолкать по проектам забывал. Из-за этого происходила огромная путаница и потеря наработок. Поэтому я и выделил библиотеки в отдельный каталог, а если собираюсь писать новую или модернизировать старую, то текущий каталог с библиотеками я архивирую и обязательно оставляю комментарий, что в нём собираюсь менять.
Так как библиотеки и проекты хранятся в одном каталоге, их удобно переносить с компьютера на компьютер. Позже будет показана маленькая хитрость, позволяющая копировать данный каталог с проектами на любой диск, с любой буквой, и ничего не будет теряться и будет работать дальше. Только одно условие. Данные каталоги должны быть относительно друг друга именно в таком порядке. А теперь продолжим...
У нас есть два пути:
- Сделать так, чтобы каталог проектов MTWorkDevel можно было перемещать на любой диск целиком и свободно работать над проектом;
- Каталог проектов привязать к определённому диску, но каталог конкретного проекта можно записывать куда угодно.
Перед тем, как рассмотрим варианты, давайте ещё немного позанимаемся удалением. Удаляем каталог Drivers:
И ещё один лишний файл:
Переходим в настройки проекта, и в указанных пунктах, при указанных опциях, удаляем ссылки на каталоги, отмеченные синим (обратите внимание на выделенные позиции):
Вариант №1.
Переходим в Source Location и нажимаем кнопку "Link Folder". Если данной закладки нет, нужно нажать "Apply and Close" и открыть настройки заново (этот глюк ещё не устранили):
Ставим галочку, нажимаем кнопку "Browse" и выбираем папку с каталогом с ядра:
Начинаем прописывать пути (обратите внимание на выделенные позиции):
Если посмотреть внимательно, то путь прописан не так "C:/WorkDevel/STM32Lib/Device/Stm32F4xx", а "../../../../STM32Lib/Device/Stm32F4xx". Что это даёт? В первом случае вы путь библиотек жёстко привяжете к месту на определённом диске и при переносе проекта на другой компьютер будете получать сообщения, что каталоги не найдены. Во втором случае "/.." означают перейти на каталог выше. Таким образом мы задаём относительный путь для наших библиотек. Как вычислить этот путь?
Наш код находится в Src. Чтобы попасть в каталог Developer, нужно перейти на 4 шага выше. Отсюда у нас идёт цепочка из 4 шагов "../../../../". Далее уже название самого каталога. Результирующая цепочка - "../../../../STM32Lib/Device/Stm32F4xx". То же самое и для файлов библиотек, независящих от ядра МК.
Указывать нужно именно каталог, где находятся библиотеки. Файлы с кодом компилятор ищет сам, если я не путаю - в каталогах Src и Source (кому интересно, может проверить сам).
Переключаем конфигурацию на Release и нажимаем кнопку "Add Folder":
Добавляем указанные каталоги, это позволит компилировать нам и в конфигурации Release:
Теперь можно нажимать кнопку "Apply" и "Apply and Close". Почему именно так? В ранних версиях CubeIDE был глюк. Не нажмёшь "Apply", изменения не сохранятся. В начале я предупреждал, что всегда пользуюсь самыми свежими версиями программного обеспечения, но, если кто-то пользуется старой версией, может наступить на эти грабли.
У нас появятся линки на эти каталоги:
Примечание: ссылки не редактируются, только удаление и создание по новой.
Теперь вы в них можете создавать библиотеки или закидывать туда новые. Если закинули библиотеки не средствами CubeIDE, он их не увидит. Нужно ткнуть мышью в название проекта и нажать кнопку F5. Происходит сканирование каталогов и новые файлы появятся в проекте.
Следующим шагом нам нужно указать все каталоги, где находятся файлы заголовков:
Жамкаем на них правой кнопкой и выбираем "Add/remove include path":
В появившемся окне ставим обе галочки и жмём "OK". И так нужно сделать для всех отмеченных ранее каталогов:
Переименовываем main.c в main.cpp и вставляем в него #include "STM32.h"
. Компилируем, получаем ошибки:
Эти ошибки возникают из-за библиотек, которые не дописаны или не подходят для данного ядра. Также ошибка возникает для SPI и SPI_Soft, необходимо исключить из компиляции эти файлы. Для этого нужно перейти в проекты и на отмечаемых файлах нажать правой кнопкой. Следует учесть, что иногда отмечается не файл исходника, а его заголовок, но исключать нужно именно файл *.cpp:
Тут аналогично:
Так как компилятор не показывает все ошибки сразу, приходится компилить и последовательно исключать их из проекта. Если все пути указаны правильно, то ошибок быть не должно.
Вариант №2.
Итак мы имеем следующий каталог:
Тыкаем правой кнопкой на проекте и выбираем "Import":
Выбираем импорт файловой системы:
Выбираем каталог с ядром:
Расставляем галочки, где нужно:
И нажимаем "Finish". То же самое делаем с каталогом Library, и, как и в первом случае, у нас появятся прилинкованные каталоги. Далее мы аналогично заносим пути к каталогам и вместо линковки делаем добавление каталогов. Не забываем сделать это для обеих конфигураций компиляторов и исключить некомпилируемые библиотеки.
И раз пошла такая пьянка, есть ещё вишенка на торт. Если вы создали проект, и всё получилось, скопируйте его куда-нибудь и держите за образец. Если с таким МК ещё будете работать, он вам пригодится. НО! Как всегда есть нюанс. Копируем каталог с другим именем, у меня F407VExx, и открываем:
Кроме того, если попытаетесь открыть предыдущий проект, он не откроется или откроется с глюками. Чтобы такого не было, делаем следующее. Идём в каталог, где находится проект и правим 3 файла:
- .cproject
- .project
- Delete_Hal.io
В первых двух файлах текстовым редактором нужно поменять "Delete_Hal" на новое имя каталога "F407VExx". Причём в одном файле он встречается 4 раза, в другом 1. А файл "Delete_Hal.ioc" переименовать в "F407VExx.ioc". Теперь после открытия проекта у нас будет всё в порядке:
На этом пока всё, дальше будем запускать тактовый генератор на нужной нам частоте. Все материалы будут лежать по этой ссылке: ссылка. По мере накопления материала данные будут обновляться.
Тема на форуме - перейти.
"Для проверки можно в main.cpp вставить в начале строку #include "STM32.h" и вновь откомпилировать проект. Если все пути указаны правильно, то ошибок быть не должно."
Делаю это действие и при компиляции выскакивает ошибка: нет файла или каталога. Пути прописаны в соответствии со статьёй. Прошу указать, если не сложно, в каком направлении копать.)))
Внизу, где выводится вся служебная информация, есть закладка "problems", мне нужны все сообщения, которые там вывелись.
День добрый! Вопрос: какие библиотеки нужно подключать? По приведенным снимкам непонятно. У меня STM32F405RG...
Так, какие же библиотеки нужно устанавливать?
Какие нужны именно для С++?
Будут ли работать те, что есть для простого С?
Откуда брать библиотеки?
Вы используете SPL?
Нужно ли подключить что-либо из "грохнутого" CubeMX HAL?
Извините. Раньше не заметил.
Все библиотеки в этом проекте лежат на Яндекс диске. Как их подключать расписано довольно подробно.
У Вас могли возникнуть проблемы из за попытки скрестить их с чьими то другими библиотеками.
Там находятся библиотеки только те, что описаны в статьях этой серии. Другие можно подключить только самому, если знаете как это делать.
У меня их на самом деле гораздо больше, но я их пишу только при возникновении в их необходимости.
Все библиотеки написаны так, что бы применять только С++.
Если нужно что то конкретное, могу или написать, или помочь написать.
SPL и HAL не использую вообще.
Библиотеки написанные для С то же будут работать. Но нужно суметь их приблудить.
И в этой статье описана только инициализация системного тактового генератора.
Это ещё не С++
Ну и когда-же будет продолжение ?
Там 21 статья. Всё прочитали?
Я бы с удовольствием их прочитал, но тут как-то не очень понятно где их искать.
Вот нашёл только Часть 1 и Часть 2
Ну и соответственно, забрал с Вашего файлообменника библиотеку.
Если не затруднит, можете приложить ссылки на остальные статьи?
Давно мечтаю перейти на С++ при разработке под STM32F4
О, кажется понял как их искать.
Нужно отбросить "хвост" в адресе и использовать только часть адреса до номера статьи (включительно).
т.е. вот так: https://microtechnics.ru/profilegrid_blogs/chast-03
и тогда ссылка находится.
...всё, пошёл читать дальше.
Спасибо за реально полезный материал и за проделанную работу.
Хотя нет. Видимо всё-же нужны ссылки.
Т.к. статью с номером 4, по ссылке: https://microtechnics.ru/profilegrid_blogs/chast-04
уже не находит.
Обычно для цикла татей всегда в шапке дают ссылку на оглавление со списком ссылок на все страницы многостраничной статьи.
Было бы не плохо если бы добавили, возможно конечно я один такой не внимательный, раз не понял где искать остальные, а возможно у кого-то так-же как и у меня с этим возникла проблема.
Пути, по которым можно открыть статьи:
Вариант можно выбирать, какой по вкусу, на мой взгляд путь #3 является самым верным.
P. S. Ссылки трогать незачем в целом. Содержание/оглавление добавить возможно имеет смысл.
Неплохо было бы оглавление.
Зашёл к человеку в блог, а там содержание.
Тем более, ветвление ещё будет по тематике.
Не очень удобно после каждой новой статьи во все предыдущие добавлять пункт, в этом и смысл, что у каждого пользователя есть личная вкладка "Блог", где все отображается (ну это вообще классический механизм, ничего новаторского, везде так в принципе и сделано).
Это касаемо оглавления внутри статей в шапке.
Когда мы переходим в сообщество, мы видим, на данный момент, четырёх авторов.
Допустим мы имеем там или сортировку по авторам, или выбор автора.
Мереходим к автору и видим закреплённый список статей данного автора.
Может при такой организации не нужно будет бить статьи автора по темам. Есть список и здорово. (Хотел сказать другое слово, удержался 🙂 )
При добавлении и одобрении статьи, в этот список вставляется автоматически запись со ссылкой.
Ну верно, так и есть ) Нажимаешь на ник автора, переходишь к автору, видишь список его статей.
Я понял, о чём разговор.
Но это как то не очевидно.
А список статей, автоматически пополняемый вначале, было бы неплохо.