feat(st7789): драйвер TFT-панелей ST7789V поверх SPI
Перенесён из KONOR_ds18b20/lib/st7789; в OpticalTester лежала побайтово такая же копия. Ядро не включает заголовки МК и не заводит кадрового буфера: примитивы пишут пиксели потоком, поэтому драйвер работает на МК с единицами килобайт ОЗУ. Платформа подключается через ST7789_Io: обязательны write, set_command и delay_ms, остальное — по разводке платы.
This commit is contained in:
65
c/st7789/README.md
Normal file
65
c/st7789/README.md
Normal file
@@ -0,0 +1,65 @@
|
||||
# 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.
|
||||
Reference in New Issue
Block a user