Данный дисплей работает по интерфейсу SPI,
поэтому первым делом, нужно включить его в cubeIde или cubeMx,
если подключать дисплей также как на схеме выше, то нужно включить SPI2 в
режиме Full-Duplex-Mode. Можно включить и другой, но для этого нужно Пины DIN и CLK
дисплея подключить к пинам MOSI и SCK выбранного порта SPI на контроллере.
Остальные же пины нужно установить в режим gpio_output. При этом их тоже можно заменить на другие.
Переходим к коду. В конце статьи будет ссылка на готовую библиотеку,
с некоторыми функциями. Код был найден на просторах интернета, после чего
из него было вырезано все лишнее, а также добавлены другие функции.
Изначально этот код был написан на основе библиотеки adafruit для arduino.
Для использования библиотеки нужно скопировать файлы st7735.h и st7735.c в
ваш проект, и подключить файл st7735.h в коде main.c
Подключение и настройка библиотеки.
Для использования библиотеки нужно скопировать файлы st7735.h, st7735.c, fonts.h и
fonts.c в ваш проект, и подключить файлы st7735.h и fonts.h в коде main.c.
Настройка подключения дисплея:
//st7735.c
//Если вы используете другой контроллер, то нужно вместо "f4xx" вписать ваш,
//посмотреть его можно в файле main.h
#include "stm32f4xx_hal.h"
//st7735.h
//Если вы выбрали другой порт SPI то вместо "hspi2" нужно вписать выбранный порт
#define ST7735_SPI_PORT hspi2
//Здесь можно поменять остальные пины
#define ST7735_RES_Pin GPIO_PIN_7
#define ST7735_RES_GPIO_Port GPIOC
#define ST7735_CS_Pin GPIO_PIN_6
#define ST7735_CS_GPIO_Port GPIOB
#define ST7735_DC_Pin GPIO_PIN_9
#define ST7735_DC_GPIO_Port GPIOA
Описание функций библиотеки.
//Инициализация дисплея, вызывается один раз, в начале кода
void ST7735_Init(void);
//Рисование пикселя на дисплее
void ST7735_DrawPixel(uint16_t x, uint16_t y, uint16_t color);
//Рисование строки на дисплее
void ST7735_WriteString(uint16_t x, uint16_t y, const char* str, FontDef font, uint16_t color);
//Рисование числа на дисплее
void ST7735_WriteInt(uint16_t x, uint16_t y, int num, FontDef font, uint16_t color);
//Рисование закрашенного прямоугольника на дисплее
void ST7735_FillRectangle(uint16_t x, uint16_t y, uint16_t w, uint16_t h, uint16_t color);
//Заливка дисплея
void ST7735_FillScreen(uint16_t color);
Пример работы с библиотекой
int main(void) {
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_USART2_UART_Init();
MX_SPI2_Init();
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
ST7735_Init();
while (1)
{
ST7735_FillScreen(ST7735_BLACK);
HAL_Delay(3000);
for (int i = 0; i < 1000; i++) {
ST7735_DrawPixel((rand() % 160), (rand() % 128), ST7735_COLOR565((rand() % 255), (rand() % 255), (rand() % 255)));
}
HAL_Delay(3000);
ST7735_FillScreen(ST7735_BLACK);
ST7735_WriteString(5, 5, "Font16x26", Font_16x26, ST7735_RED);
ST7735_WriteString(5, 31, "Font11x18", Font_11x18, ST7735_YELLOW);
ST7735_WriteString(5, 49, "Font7x10", Font_7x10, ST7735_GREEN);
ST7735_WriteInt(5, 59, 1234, Font_16x26, ST7735_RED);
ST7735_WriteInt(5, 85, 123456, Font_11x18, ST7735_YELLOW);
ST7735_WriteInt(5, 103, 123456789, Font_7x10, ST7735_GREEN);
HAL_Delay(3000);
ST7735_FillScreen(ST7735_BLACK);
ST7735_FillRectangle(5, 5, 20, 40, ST7735_YELLOW);
ST7735_FillRectangle(15, 25, 20, 40, ST7735_GREEN);
ST7735_FillRectangle(51, 48, 100, 50, ST7735_BLUE);
HAL_Delay(3000);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}