Меню Закрыть

Подключение TFT Display ST7735 к микроконтроллеру STM32F407VGT6

Характеристики дисплея

В текущем проекте подключим дисплей ST7735 к плате STM32F4 Discovery с STM32F407VGT6. Сам дисплей выглядит вот так :

Дисплей служит для вывода данных с вашего микроконтроллера. Диагональ 1.8 дюйма 128×160 пикселей.Тип матрицы: TFT LCD (Thin-Film Transistor Liquid Crystal Display). Плюсом данного дисплея является подключение его по интерфейсу SPI, что занимает минимум пинов. Имеет встроенную подсветку и готовые библиотеки для работы с ним. Питается он от 3.3В , стандарта для микроконтроллеров.

Настройка в CubeIDE

Дисплей работает по протоколу SPI. Он принимает информацию и ничего не передаёт обратно. Для начала разберёмся с настройками в CubeIDE. Заходим в настройки Clock Configuration. Будем использовать SPI1 нашего контроллера. Он находится на шине APB2 peripheral clocks. Выставляем настройки таким образом чтобы получить 25МГц.

Далее вкладка Connectivity — SPI1.В строке Mode выбираем Transmit Only Master т.к. мы ничего не ожидаем от дисплея. 

Выставим следующие настройки.

Mode — Transmit Only Master

Frame Format — Motorola

Data Size —  Размер данных стандартная настройка для дисплея 8 бит.

First Bit ST7735 использует MSB First (старший бит передается первым).

Настройка скорости. ST7735 работает на скорости до 15 МГц.

Выставим Prescaler 2 , получим Baud Rate 12.5 MBits/s

Clock Polarity (Полярность тактового сигнала, CPOL) ST7735 обычно требует CPOL = 0, то есть линия SCK должна быть низкой.

Clock Phase (Фаза тактового сигнала, CPHA):1 Edge (Переход по первому фронту)

CRC — Disabled ( контрольная сумма выключена )

Не забываем генерировать наш код. На этом с настройками всё.

Схема подключения

Наш микроконтроллер выглядит так.

Пин PA5 подключается к выводу SCK дисплея и отвечает за тактовый сигнал SPI, а PA7 соединяется с выводом SDA, обеспечивая передачу данных. Пин PB15 используется для управления подсветкой дисплея и подключается к выводу LED. Пин PB14 для выбора чипа. Пин PB13 соединяется с выводом AO, который определяет режим передачи: команда или данные — для передачи данных на дисплей этот пин устанавливается в высокий уровень. Пин PB12 подключается к выводу RES и используется для аппаратного сброса дисплея. Также необходимо подать питание 3.3 В на вывод VCC и соединить общий провод (GND) микроконтроллера с землёй дисплея. Пин дисплея CS ( выбор чипа ) нам не нужен так как дисплей один.

Код программы

Используем данную библиотеку https://github.com/afiskon/stm32-st7735 Поместим заголовочные файлы fonts.h st7735_cfg.h ST7735.h в папку Core/Inc и файлы fonts.c

ST7735.c в папку Core/Src

Подключаем заголовочные файлы

/* USER CODE BEGIN Includes */
#include "fonts.h"
#include "ST7735.h"
/* USER CODE END Includes */

Далее в функции main инициализируем дисплей, включим подсветку и установим ориентацию экрана

/* USER CODE BEGIN 2 */
ST7735_Init();
ST7735_Backlight_On();
ST7735_SetRotation(r);
ST7735_FillScreen(ST7735_BLACK);
/* USER CODE END 2 */

Вывод числа

Зададим начальную переменную счетчика

/* USER CODE BEGIN PV */
int counter = 0;
/* USER CODE END PV */

Инициализируем функцию передачи

void sendNumber(int loc_counter) {
char buffer[10]; // Буфер для хранения строки
sprintf(buffer, "%d", loc_counter); // Преобразование числа в строку
ST7735_DrawString(0, 3*10, buffer, Font_11x18, ST7735_GREEN, ST7735_BLACK);
}

Создается массив символов длиной 10. Этот массив используется как буфер для хранения строки, которая будет представлять число loc_counter в текстовом виде.

Массив достаточно большой, чтобы вместить 10 символов. Функция sprintf преобразует число loc_counter в строку и сохраняет результат в массиве buffer.

Следующая строка ST7735_DrawString Это вызов функции из библиотеки драйвера для дисплея ST7735. Она выводит строку, содержащую число, на экран.

Аргументы функции:

  • 0: Координата x — горизонтальное положение текста на экране.
  • 3*10: Координата y — вертикальное положение текста на экране. Вычисляется как 30 пикселей (3 строки по 10 пикселей).
  • buffer: Указатель на строку, которую нужно вывести на дисплей.
  • Font_11x18: Шрифт для отображения текста (например, размер символа — 11×18 пикселей).
  • ST7735_GREEN: Цвет текста (зеленый).
  • ST7735_BLACK: Цвет фона текста (черный).

Вызовем нашу функцию в методе while 

/* USER CODE BEGIN WHILE */
while (1) {
HAL_Delay(1000);
sendNumber(counter);
counter++;
}
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */

Напишем функцию вывода строки с числом

void sendString(const char* loc_string) {
ST7735_DrawString(0, 3*10, loc_string, Font_11x18, ST7735_GREEN, ST7735_BLACK);
}

В цикле вызовем её

</pre>
ST7735_FillScreen(ST7735_BLACK);
char buffer[50];
sprintf(buffer, "Hi! I'm string %d", counter);
sendString(buffer);

На дисплее получим надпись Hi! I’m string 0 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *