Files
Andrey Kruchinkin c7798c02db feat(st7789): драйвер TFT-панелей ST7789V поверх SPI
Перенесён из KONOR_ds18b20/lib/st7789; в OpticalTester лежала побайтово
такая же копия.

Ядро не включает заголовки МК и не заводит кадрового буфера: примитивы
пишут пиксели потоком, поэтому драйвер работает на МК с единицами
килобайт ОЗУ. Платформа подключается через ST7789_Io: обязательны
write, set_command и delay_ms, остальное — по разводке платы.
2026-08-23 01:15:11 +03:00
..

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. Обязательны три вызова:

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.

Быстрый старт

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.