Перейти к содержимому

Рецепты для Доски-H723

Рецепт — небольшой законченный модуль на C: recipes/<имя>/<имя>.c + .h и README с объяснением, как он устроен. Рецепты проверены на плате, в README — настоящий вывод лога; исключение — i2c_bme280, проверенный без датчика (см. его README). Рецепты подключаются к основному проекту examples/BoardH723 без правки его кода.

Рецепт Что показывает
gpio_button кнопка BOOT по прерыванию, подавление дребезга, светодиод
uart_dma приём UART через DMA в кольцевой буфер, команды из терминала
i2c_bme280 сканер шины I2C, датчик BME280/BMP280: температура, давление, влажность
wifi_http подключение к Wi-Fi, HTTP GET на сокетах FreeRTOS+TCP
tcp_speed скорость TCP по Wi-Fi: окна TCP, энергосбережение, клиент для ПК
sd_file дозапись в файл на SD, замер скорости записи и чтения
rtos_queue две задачи FreeRTOS и очередь между ними
lcd_ltdc дисплей RGB 800×480: LTDC, DMA2D, двойной буфер в SDRAM, картинка с SD
lvgl_demo интерфейс на LVGL 9: сенсорный экран GT911, графики, русский шрифт TTF с SD
lvgl_clock часы (NTP) и погода (open-meteo) на LVGL, анимация пузырей; Wi-Fi и город — в файле на SD

Список рецептов через ; в опции H723_RECIPES:

Окно терминала
cd examples/BoardH723
cmake --preset Release -DH723_RECIPES="gpio_button;sd_file"
cmake --build build/Release
python ../../tools/dfu_flash.py

CMake добавляет в сборку все .c из папок рецептов и генерирует build/Release/recipes_start.c, который вызывает <имя>_start() каждого рецепта. appTask (app/app.c) вызывает его, когда уже работают USB-сеть, SDRAM, ESP32-C2, SD-карта, Lua и SSH. Выключить рецепты — -DH723_RECIPES="".

Рецепты не зависят от Lua и работают в прошивке без него (-DH723_WITH_LUA=OFF); только wifi_http, tcp_speed и lvgl_clock тогда подключаются к сети сами — имя и пароль задаются в wifi_http.h, опциями -DTCP_SPEED_SSID/-DTCP_SPEED_PASSWORD и в /SD/clock.ini. lcd_ltdc, lvgl_demo и lvgl_clock выводят на один дисплей — вместе их не включают.

Вывод рецептов — в лог USART1 115200 (PB14, на разъёме отладчика J6 и на J2).

  1. Папка recipes/my_thing/ с my_thing.c, где есть void my_thing_start(void).
  2. my_thing_start() только создаёт задачу FreeRTOS и сразу возвращается: appTask на ней не задерживается.
  3. cmake --preset Release -DH723_RECIPES="my_thing".
  4. Если рецепту нужны библиотеки или код другого рецепта — они подключаются в recipes/my_thing/recipe.cmake (образец — lvgl_demo/recipe.cmake).

Правила, которые соблюдают все рецепты:

  • Задачи, очереди и стеки — статически (xTaskCreateStatic): их размер виден при сборке, а не выясняется при нехватке кучи во время работы.
  • Буферы для DMA — не в обычных static-массивах: они попадают в DTCM, куда DMA1/DMA2 доступа не имеют. Подходят pvPortMalloc (RAM_D1) или sdramMalloc (SDRAM), с выравниванием по 32 байта и очисткой/инвалидацией кэша.
  • Прерывания, из которых зовутся функции ...FromISR, — с приоритетом 5 и ниже по важности (число ≥ 5).
  • Свободные выводы и периферия — в docs/board.md репозитория.

Рецепты в репозитории: recipes