Files
templates/c/st7789/README.md
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

66 lines
2.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.