#ifndef DS_ST7789V_H #define DS_ST7789V_H #include #ifdef STM32G030xx #include "stm32g0xx_hal.h" #endif #ifdef STM32G0B1xx #include "stm32g0xx_hal.h" #endif #ifdef STM32F030xx #include "stm32f0xx_hal.h" #endif /* Параметры дисплея */ #define DS_ST7789V_WIDTH 240 #define DS_ST7789V_HEIGHT 320 /* Основные команды контроллера ST7789V */ #define ST7789V_CMD_NOP 0x00 #define ST7789V_CMD_SWRESET 0x01 #define ST7789V_CMD_SLPOUT 0x11 #define ST7789V_CMD_INVOFF 0x20 #define ST7789V_CMD_INVON 0x21 #define ST7789V_CMD_DISPOFF 0x28 #define ST7789V_CMD_DISPON 0x29 #define ST7789V_CMD_CASET 0x2A #define ST7789V_CMD_RASET 0x2B #define ST7789V_CMD_RAMWR 0x2C #define ST7789V_CMD_MADCTL 0x36 #define ST7789V_CMD_COLMOD 0x3A /* Варианты ориентации экрана */ typedef enum { DS_ST7789V_ORIENTATION_PORTRAIT = 0, DS_ST7789V_ORIENTATION_LANDSCAPE, DS_ST7789V_ORIENTATION_PORTRAIT_REV, DS_ST7789V_ORIENTATION_LANDSCAPE_REV } DS_ST7789V_Orientation_t; /* Структура конфигурации пинов (аналогично DS_Button) */ typedef struct { GPIO_TypeDef *Port; uint16_t Pin; } DS_ST7789V_Pin_t; /* Главная управляющая структура дисплея */ typedef struct DS_ST7789V { SPI_HandleTypeDef *hspi; // Указатель на аппаратный SPI DS_ST7789V_Pin_t CS; // Пин выбора чипа DS_ST7789V_Pin_t DC; // Пин выбор Команда/Данные DS_ST7789V_Pin_t RES; // Пин аппаратного сброса uint16_t Width; // Текущая ширина с учетом поворота uint16_t Height; // Текущая высота с учетом поворота DS_ST7789V_Orientation_t Orientation; // Текущая ориентация } DS_ST7789V; /**@brief Инициализация дескриптора дисплея и передача начальных команд @param lcd Указатель на структуру дисплея @param hspi Указатель на сгенерированный CubeMX интерфейс SPI*/ void DS_ST7789V_Init(DS_ST7789V *lcd, SPI_HandleTypeDef *hspi, GPIO_TypeDef *cs_port, uint16_t cs_pin, GPIO_TypeDef *dc_port, uint16_t dc_pin, GPIO_TypeDef *res_port, uint16_t res_pin); /**@brief Установка ориентации экрана*/ void DS_ST7789V_SetOrientation(DS_ST7789V *lcd, DS_ST7789V_Orientation_t orientation); /**@brief Заливка экрана или выделенной области цветом (RGB565)*/ void DS_ST7789V_FillRect(DS_ST7789V *lcd, uint16_t x, uint16_t y, uint16_t w, uint16_t h, uint16_t color); /**@brief Низкоуровневые функции отправки (могут использоваться для кастомных * оптимизаций)*/ void DS_ST7789V_WriteCommand(DS_ST7789V *lcd, uint8_t cmd); void DS_ST7789V_WriteData(DS_ST7789V *lcd, uint8_t *data, uint16_t size); #endif // DS_ST7789V_H