# st7789 Драйвер TFT-панелей на контроллере **ST7789V** (SPI, цвет RGB565). Ядро на C99: не включает заголовки микроконтроллера, не трогает регистры, не заводит кадровый буфер. Примитивы пишут пиксели в контроллер потоком, поэтому драйвер живёт на МК с единицами килобайт ОЗУ. ``` приложение │ st7789.c окно вывода, примитивы, текст st7789_font.c шрифт 6x8, масштаб 1..4 │ ST7789_Io write, set_command, set_select, set_reset, set_backlight, delay_ms │ порт платы SPI + GPIO ``` ## Состав | Файл | Что делает | Зависимости | |---|---|---| | `st7789.h`, `st7789.c` | инициализация панели, поворот, заливка, пиксели, линии, текст | `stdint.h` | | `st7789_font.h`, `st7789_font.c` | растровый шрифт 6x8 с масштабированием, символ градуса `0x7F` | `stdint.h` | ## Что нужно от платформы Заполнить `ST7789_Io`. Обязательны три вызова: ```c void write(void *ctx, const uint8_t *data, uint32_t size); /* SPI, MSB первым */ void set_command(void *ctx, uint8_t is_command); /* линия DC */ void delay_ms(void *ctx, uint32_t ms); ``` Необязательные: `set_select` (без него CS считается посаженным на землю), `set_reset` (без него выполняется программный SWRESET), `set_backlight`. ## Быстрый старт ```c ST7789_Display display; ST7789_Config config; ST7789_ConfigDefault(&config, 240, 320); /* геометрия конкретного модуля */ config.rotation = ST7789_ROTATION_90; ST7789_Io io = { .write = spi_write, .set_command = dc_set, .delay_ms = board_delay, .context = &board }; ST7789_Init(&display, &io, &config); ST7789_FillScreen(&display, ST7789_BLACK); ST7789_DrawText(&display, 4, 4, "SET", ST7789_WHITE, ST7789_BLACK, 2); ``` Геометрия зависит от модуля: у панелей 240x240 и 240x320 смещений нет, у 135x240 видимая область сдвинута — значения берутся из документации модуля и задаются полями `offset_x` / `offset_y`. ## Проверено в проектах `KONOR_ds18b20`, `OpticalTester` — обе платы на STM32F103C8T6, порт занимает около сорока строк поверх SPI1 и трёх выводов GPIO.