STM32.TFT дисплей.Библиотека для дисплея

Автор: | 07.04.2018

Одним из средств представления информации в удобном пользователю виде является TFT дисплей. Мне в руки попался модуль TFT экрана на базе контроллера ST7735.Внешний вид модуля представлен на изображении ниже:

Он обладает следующими характеристиками:
• Контроллер дисплея: ST7735
• Разрешение:128×160
• Напряжение питания:3.3-5В
• Диагональ: 1.8 дюйма
• Интерфейс связи: SPI

Описание выводов модуля дисплея:
• VCC,GND — Линии питания дисплея. VCC необходимо подключить к + источника питания (3.3-5В), GND к земле.
• LED — Вывод подсветки микроконтроллера, можно подключить напрямую к VCC.
• SCK — Тактовый вывод контроллера. Подключать к соответствующему выводу SCK микроконтроллера.
• SDA — Вывод данных контроллера. Подключать к выводу MOSI микроконтроллера.
• CS — Вывод выбора контроллера. Подключать к выводу CS микроконтроллера
• RESET — Вывод сброса контроллера. Подключать к любому выводу микроконтроллера.
• A0 — Вывод выбора команд/данных контроллера. Подключать к любому выводу контроллера. По логическому уровню на данном выводе,контроллер дисплея понимает что ему передается данные или команда.

Для управления модулем необходимо инициализировать SPI микроконтроллера, выполнить сброс дисплея, далее необходимо послать модулю команды инициализации(такие как программный reset, выбор гаммы цветов, включение дисплея и.т.д.), и лишь потом можно подавать ему команды и данные для вывода изображения.
Передача данных и команд контроллеру ST7735, ведется по линии SDA.Перед этим необходимо выставить соответствующий логический уровень на выводе A0,который будет означать, передаем ли мы данные или команду. Вывод изображения на дисплей ведется путем записи цвета в память дисплея.Цвет передается 2 байтами, и кодируется по формату 565.Файл с описанием основных цветов можете скачать ЗДЕСЬ.

Основными командами используемыми при работе с контроллером являются команды CASET,RASET и RAMWR.

Читайте также  STM32 для начинающих. Урок 5. Внешние прерывания STM32.

При помощи команд CASET и RASET можно задать область отрисовки. То есть, мы выбираем ту часть дисплея в которую последовательно будем выводить пиксели изображения.

Команда RAMWR является командой записи в ОЗУ контроллера дисплея.Данную команду необходимо передавать перед началом передачи кодов цветов дисплею.

Перечень и описание всех команд можете смотреть в описании контроллера, расположенное ЗДЕСЬ
Решая задачу подключения данного модуля к микроконтроллеру STM32, была разработана библиотека предоставляющая все функции для быстрой и удобной работы с дисплеем. Проверена и отлажена она на контроллере STM32F103C8T6. Приводить её полный текст не вижу особого смысла, поэтому объясню как начать с ней работу,и описание основных функций.

Первым делом открываем файл st7735.h. В нем определены основные параметры библиотеки. Рассмотрим самые необходимые:

LCD_SPI — Номер SPI по которому будет производится обмен данными с дисплеем
CS_LOW,CS_HIGH — Дефайны устанавливающие низкий и высокий уровень линии CS соответственно. При смене CS вывода(если вы будете использовать другую ножку контроллера) следует изменить эти дефайны для обнуления и установки выбранной вами ножки.
RESET_LOW,RESET_HIGH — Дефайны устанавливающие низкий и высокий уровень линии RESET.
A0_LOW,A0_HIGH — Дефайны устанавливающие низкий и высокий уровень линии A0.

Теперь перейдем к файлу st7735.c.

Первым делом при смене выводов контроллера которые будут оперировать дисплеем редактируйте функцию ST7735_Init в которой инициализируется вся периферия которая будет участвовать в работе с дисплеем. Остальные функции в редактировании не нуждаются (В большинстве случаев).
Опишу все функции библиотеки:
• ST7735_write — передает байт по SPI к дисплею, и ждет сброса флага BSY
• ST7735_Send — передает байт по SPI к дисплею, без ожидания сброса флагу BSY.Используется для передачи большого объема данных к дисплею
• ST7735_SendData — Устанавливает 1 на выводе A0 дисплея, тем самым сообщая ему о том что далее будут следовать данные, и передает байт данных при помощи функции ST7735_write
• ST7735_SendCmd — Устанавливает 0 на выводе A0 дисплея, тем самым сообщая ему о том что далее будет следовать команда. После этого передает байт команды при помощи функции ST7735_write
• ST7735_Init — Инициализация необходимой периферии микроконтроллера и инициализация дисплея.
• ST7735_AddrSet — Установка области дисплея в которую будут выводится следующие далее данные.
• ST7735_Clear — Функция очистки дисплея. Цвета определены в файле COLOR565.h
• ST7735_DrawPixel — Функция отрисовки пикселя цвета color, по координатам x,y
• ST7735_DrawHLine — Функция отрисовки горизонтальной линии цвета color, по соответствующим координатам.
• ST7735_DrawVLine — Функция отрисовки вертикальной линии цвета color, по соответсвующим координатам.
• ST7735_DrawBMP — Функция заполнения всего дисплея изображением из массива array, длинной length
• ST7735_DrawChar — Функция отрисовки символа chr, цвета color и задним фоном background_color, по координатам X,Y. Размер символа 5 на 7 пикселей.
• ST7735_DrawChar7x11 — Функция отрисовки символа chr, цвета color и задним фоном background_color, по координатам X,Y. Размер символа 7 на 11 пикселей.
• ST7735_DrawString7x11 — Функция отрисовки строки chr, цвета color и задним фоном background_color, по координатам X,Y. Размер символа строки 7 на 11 пикселей.
• ST7735_DrawRectangle — Функция отрисовки прямоугольника по соответствующим координатам.
• ST7735_Button_Draw — Функция отрисовки кнопки описанной структурой ST7735_Button. Кнопка представляет собой прямоугольник с текстом.
• ST7735_Button_StructInit — Начальная инициализация структуры ST7735_Button.
• ST7735_Button_Destroy —Удаляет кнопку btn с дисплея (Закрашивает область кнопки цветом фона кнопки).
• ST7735_ProgressBar_Draw — Функция отрисовки полосы прогресса,описанной структурой ST7735_ProgressBar. Полоса прогресса представляет собой прямоугольник, частично заполненный соответствующим цветом.
• ST7735_ProgressBar_SetProgress — Установка значения прогресса,соответствующей полосы прогресса.
• ST7735_ProgressBar_StructInit — Начальная настройка структуры описывающей ProgressBar.
• ST7735_ProgressBar_Destroy — Функция удаляющая соответствующий индикатор прогресса. Закрашивает данную полосу прогресса цветом его фона.
• ST7735_ListBox_Draw — Функция отрисовки списка описанного структурой ST7735_ListBox. Список представляет собой прямоугольник с несколькими строками.
• ST7735_ListBox_SetSelected — Функция выбора текущего выбранного элемента списка(Он будет подсвечен).
• ST7735_ListBox_SetVisibleRange — Функция установки выводимых на экран элементов списка. То есть, ввиду ограничения размера экрана, на вывод можно подавать не все элементы списка, а лишь их диапазон.
• ST7735_ListBox_GetSelectedItem — Получить текущий выбранный элемент.
• ST7735_ListBox_StructInit — Началная инициализация структуры ST7735_ListBox.
• ST7735_ListBox_Destroy — Функция удаления выбранного ListBox с дисплея. Область в которой он был определен,будет закрашена цветом его фона.

Читайте также  GPS Модуль.GYNEO6MV2.

Следующие 3 функции используются для работы с контроллером ПДП(Почитать о нем можете ЗДЕСЬ). И последние 3 функции используются для организации временных задержек.

Данная библиотека является свободнораспостраняемой. Однако её публикация на других сайтах, а так же использование в коммерческих проектах возможно только с письменного разрешения администрации сайта MKPROG.RU.Помните что ваши неправомерные действия могут преследоваться по закону.

Скачать библиотеку.

В следующей статье будет приведен пример работы с данной библиотекой.
Все ваши замечания и предложения оставляйте в комментариях! Спасибо за внимание!

STM32.TFT дисплей.Библиотека для дисплея: 9 комментариев

      1. Kurd

        Интересная статья, применяю вашу библиотеку в pic18. Хотелось узнать какой конвертор вы используете для создания массива. Ждём продолжения, удачи.

        1. DamiKK Автор записи

          Спасибо.
          Я пользовался утилитой LCD_Image_Converter для преобразования изображения в массив

  1. Валерий

    Данные выводятся Х — по короткой стороне, У — по длинной. Как повернуть?

    1. DamiKK Автор записи

      В данной библиотеке, такая функция не предусмотрена.

    1. DamiKK Автор записи

      Постараюсь сделать как можно скорее)

Добавить комментарий для DamiKK Отменить ответ

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