5.6 KiB
Новый проект на переносимых библиотеках
Этот репозиторий содержит два разных типа кода:
c/<library>/includeиc/<library>/src— переносимое ядро;c/<library>/ports/<family>— небольшой аппаратный порт конкретного семейства микроконтроллеров.
Привязка выводов, частоты шин и выбранной периферии принадлежит плате и всегда
остаётся в проекте в app_config.h либо в узком конфигурационном заголовке
библиотеки, например onewire_config.h.
Рекомендуемая структура прошивки
my-device/
app/ логика изделия
include/
src/
board/ одна конкретная плата
app_config.h выводы, частоты, адреса, возможности платы
port/ связь библиотек с SDK выбранного МК
display_port.c
keypad_port.c
eeprom_port.c
can_port.c
vendor/ CMSIS, startup, linker script или Cube-generated код
lib/templates/ git submodule этого репозитория
Не следует помещать stm32xxxx.h, HAL_*, регистры, IRQ handlers и номера
выводов в app/ или в ядро библиотеки. Тогда при переходе на другой МК
заменяются только board/, port/, startup и linker script.
Выбор готового порта DS18B20
| Целевой МК | Файл порта | Шаблон конфигурации |
|---|---|---|
| STM32F103 | c/ds18b20/ports/stm32f1/onewire_stm32f1.c |
onewire_config.f103.template.h |
| STM32G431 | c/ds18b20/ports/stm32g4/onewire_stm32g4.c |
onewire_config.g431.template.h |
| STM32G474 | c/ds18b20/ports/stm32g4/onewire_stm32g4.c |
onewire_config.g474.template.h |
В сборку добавляются ровно три файла:
c/ds18b20/src/onewire.c
c/ds18b20/src/ds18b20.c
c/ds18b20/ports/<family>/onewire_<family>.c
Пути включения:
c/ds18b20/include
board
Нужный шаблон копируется в board/onewire_config.h; после этого в нём
меняются только порт, номер вывода и бит тактирования GPIO.
G431 и G474 намеренно используют один исходник порта: GPIO, RCC и DWT для этой задачи совместимы. Раздельными остаются конфигурация платы, startup, linker script и выбранный CMSIS device define.
Рабочий пример полноценного G474-порта находится в соседнем проекте
candleLight_fw: src/device/device_g4.c отвечает за clock/GPIO,
src/can/m_can.c — за FDCAN, а include/config.h — за привязку платы
STM32G474VET6. Эти файлы остаются в прошивке, поскольку зависят от STM32 HAL,
USB gs_usb и конкретной разводки адаптера; переносимая логика протоколов
остаётся в templates.
Какие части KONOR уже общие
| Возможность | Переносимое ядро | Что остаётся в port/ проекта |
|---|---|---|
| DS18B20/1-Wire | c/ds18b20 |
готовый порт выбранного семейства и вывод |
| дисплей ST7789 | c/st7789 |
SPI, DC, CS, RESET, подсветка и задержка |
| кнопки | c/keypad |
настройка GPIO и чтение уровней |
| меню | c/menu |
только привязка painter к дисплею |
| EEPROM FT24C256 | c/eeprom-ft24c256 |
I2C write/write-read и задержка |
| CAN SETTINGS | c/can-sensor |
bxCAN для F103 либо FDCAN для G431/G474 |
Порт дисплея, EEPROM и CAN нельзя честно сделать только по названию МК:
нужно знать экземпляр периферии, альтернативную функцию и выводы конкретной
платы. Поэтому библиотеки принимают таблицы обратных вызовов, а короткие
адаптеры лежат в проекте рядом с app_config.h.
Порядок создания проекта
- Создать проект в CubeMX/Keil либо добавить CMSIS, startup и linker script.
- Подключить
templatesсабмодулем. - Добавить только ядра нужных библиотек.
- Выбрать готовый 1-Wire порт по таблице выше.
- Создать
board/app_config.hс выводами и частотами. - Реализовать короткие адаптеры SPI/GPIO/I2C/CAN в
port/. - Сначала прогнать host-тесты библиотек, затем проверить аппаратные порты логическим анализатором или осциллографом.
Так новый проект не является копией старого: он использует общие ядра одной
версии, а аппаратные отличия видны в одном небольшом каталоге port/.