Характеристики дисплея
В текущем проекте подключим дисплей 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