Я собираюсь ответить на него с точки зрения проекта Keil, потому что это программа, в которой я это сделал, но эти шаги должны быть взаимозаменяемыми с IDE. В основном это включает в себя копирование кода и добавление правильного компоновщика и исходных путей.
Проект I-CUBE-LRWAN был настроен так, что части проекта были разделены. Корневой каталог проекта состоит из трех папок: Middlewares
, Projects
и Drivers
. Эти папки содержат файлы .h
и .c
внутри своей древовидной структуры.
Драйверы
Папка Drivers
содержит все файлы, относящиеся к конкретной используемой плате, HAL (Уровень аппаратной абстракции), CMSIS и BSP (Пакет поддержки плат). HAL и CMSIS предоставляют обобщенный интерфейс к устройству, и при их использовании создает код, который может быть перенесен на другие платформы STM32 путем изменения определенных определений платы CMSIS. Я бы порекомендовал, чтобы при создании проекта вы отметили флажок, чтобы включить все библиотечные файлы в ваш проект. Это сделает компиляцию более длительной и ваш проект увеличится, но также не позволит вам возиться с отсутствующими библиотеками. BSP содержит специальные интерфейсы для интерфейсов, имеющихся на вашей платформе. Это включает в себя светодиоды и кнопки на L072Z-LRWAN1 и, в случае ядра STM32l4, джойстик / ЖК-дисплей.
Я бы порекомендовал вам скопировать конкретный BSP вашей платы (.h
и .c
) в ваш проект и использовать их в качестве стандартизированного интерфейса для поддержки определенных функций. Вы должны создать новую пару BSP .h/.c
при использовании пользовательской платы.
Проекты
Projects
содержит код, специфичный для вашего проекта, и бизнес-конец вашего приложения. Здесь возникло некоторое затруднение, поскольку ST решила внедрить весь свой код LoRaWAN в файл main.c
. Я бы порекомендовал вам взять весь код инициализации и передачи, связанный с LoRaWAN (как правило, все, что связано с LoRaMainCallback_t
), и поместить его в отдельный файл с определенным интерфейсом. Это небольшая работа, но она принесет дивиденды в связи с тем, что ваш обычный код был отделен от обработки в LoRaWAN. Я сохранил свой код LoRaWAN в файле lorawan.<h|c>
. Что касается остальных файлов: переместите содержимое в отдельные папки в вашем проекте с именами LoRaWAN/App/inc/
и LoRaWAN/App/src/
. Это относится к файлам: debug.c
, hw_gpio.c
, hw_rtc.c
, hw_rtc.c
, vcom.c
, debug.h
, hw.h
, hw_conf.h
, hw_gpio.h
, hw_msp.h
, hw_rtc.h
, hw_spi.h
, utilities_conf.h
и vcom.h
. Добавьте папку inc
в путь включения (опция -I
) и исходные файлы в свой проект.
1046 * промежуточное программное *
Папка Middlewares
должна быть скопирована из исходного проекта в целевой проект, и каждая папка или папка inc
с .h
файлами должна быть добавлена в ваш путь включения, и каждый исходный файл должен быть добавлен в ваш проект. Я бы порекомендовал сохранить структуру папок внутри вашей IDE, чтобы упростить навигацию между проектом и структурой папок.
Еще один положительный эффект от сохранения структуры папок схожим состоит в том, что обновление кода с использованием более нового стека должно быть проще, поскольку файлы можно найти в одном и том же месте в обоих проектах.
Препроцессор определяет
И самый важный шаг. Вам нужно взять параметры DEFINE
, определенные внутри проекта, и скопировать их в ваш собственный проект. Это можно найти внутри проекта Keil (и других проектов, но также и в других местах) в: options for target x
-> C/C++
-> define
. Он содержит что-то похожее на эти значения: STM32L072xx,USE_B_<board name>,USE_HAL_DRIVER,REGION_EU868,DEBUG,TRACE
. Как вы можете видеть, я использую: радио Murata со встроенным STM32, регион ЕС 868 и опции отладки и трассировки.
Должна быть возможность включить "hw.h" и скомпилировать вашу программу, когда вы все сделали правильно.