STM Урок 179. HAL. Дисплей TFT 240×320. SPI. Часть 2



В предыдущей части урока мы подключили дисплей к плате, создали проект, написали инициализацию дисплея, некоторые служебные функции и первые тесты, проверив дисплей затем на практике.

 

Для следующего теста нужны будут маленькие задержки.

Добавим функцию задержки в микросекундах

 

 

А также нужна будет функция вывода точек на экран.

Поэтому идём в файл spi_ili9341.c и ниже функции TFT9341_FillScreen добавим данную функцию

 

 

Добавим на данную функцию прототип, вернёмся в наш бесконечный цикл и напишем там тест, который будет выводить в случайные места точки случайного цвета

 

 

Проверим, как работает тест

 

 

Отлично!

В файле spi_ili9341.h подключим ещё одну библиотеку

 

 

Добавим в файле spi_ili9341.c после функции TFT9341_DrawPixel функцию отрисовки на дисплее прямой линии

 

 

Добавим для данной функции прототип в заголовочном файле и в бесконечном цикле функции main() файла main.c добавим ещё один тест, в котором будут рисоваться друг за другом параллельные отрезки во всю высоту экрана случайными цветами

 

 

Посмотрим, как работает данный тест

 

 

В следующем тесте будем чертить отрезки случайного цвета из случайной точки в случайную точку

 

 

 

Посмотрим работу данного теста

 

 

В файле spi_ili9341.c ниже функции TFT9341_DrawLine добавим функцию отрисовки прямоугольника

 

 

Добавим на данную функцию прототип в заголовочном файле и напишем тест в бесконечном цикле, который будет рисовать прямоугольники последовательно от края к центру экрана

 

 

Посмотрим, как работает данный тест

 

 

Перейдём в файл spi_ili9341.c и ниже функции TFT9341_DrawRect добавим функцию отрисовки окружности определённого радиуса с центром в определённой точке определённым цветом

 

 

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

 

 

Испытаем тест

 

 

Всё работает.

Теперь поработаем с текстом.

Для этого из репозитория Cube не важно для какого контроллера, можно и для нашего — F4, из папки UtilitiesFonts добавим файлы шрифтов (все файлы кроме Release_Notes.html) в папку Inc нашего проекта.

 

 

Заголовочный файл подключим в файле spi_ili9341.h

 

 

А остальные файлы подключим в файле spi_ili9341.c

 

 

Объявим тип структуры для инициализации шрифта и цвета текста

 

 

Выше функции инициализации дисплея добавим функцию первоначальной инициализации шрифтов

 

 

Вызовем её в самом конце тела функции инициализации дисплея

 

 

Ниже функции TFT9341_RandColor добавим три функции для установки цвета текста, цвета заливки и шрифта

 

 

Ниже добавим функцию вывода символа в определённую позицию экрана

 

 

Подобная функция у нас была в уроке 37 и не только, поэтому код её объяснять нет смысла.

Далее добавим функцию вывода строки в определённую позицию экрана

 

 

А также ниже добавим функцию изменения ориентации экрана

 

 

Такая функция тоже у нас была.

Добавим на эти функции прототипы в заголовочном файле

 

 

Вернёмся в бесконечный цикл и добавим там тест по выводу отдельных символов на экран дисплея

 

 

Соберём код, прошьём контроллер и посмотрим, как выводятся наши символы

 

 

Теперь попробуем повыводить целые строки, причём с разной ориентацией экрана

 

 

Проверим, как работает вывод строк

 

 

Теперь можно раскомментировать остальные тесты и запустить их все вместе.

Итак, сегодня нам удалось запустить дисплей на контроллере ILI9341, подключенный по шине SPI к контроллеру STM32F4, также запустить на нём несколько тестов, используя возможности библиотеки HAL.

Всем спасибо за внимание!

 

 

Предыдущая часть Программирование МК STM32 Следующий урок

Исходный код

 

 

Отладочную плату и дисплей можно приобрести здесь:

STM32F4-DISCOVERY

2,8 дюймов 240×320 SPI TFT LCD

 

 

Смотреть ВИДЕОУРОК (нажмите на картинку)

 

STM Name

6 комментариев на “STM Урок 179. HAL. Дисплей TFT 240×320. SPI. Часть 2
  1. Олег:

    Спасибо, всё работает! Только одна опечатка закралась, исправьте:
    Функция отрисовки линии (TFT9341_DrawLine()) некорректно работает, когда линия наклонна.
    Надо в самом её конце заменить строчку «err=dx;» на «err+=dx;»

  2. Спасибо большое! Исправил и на странице и в прикрепленном исходнике.

  3. АЛЕКСАНДР:

    Здраствуйте. не могу подключить #include , подскажите где взять ?
    если пишу #include «stdlib.h» библиотека подключается. но не компилируется проект. работаю в true studio .

  4. Виталий:

    Спасибо за библиотеку!
    У меня при запуске в CubeIDE выдавал ошибку «Core/Src/spi_ili9341.o:C:/Users/Admin/STM32CubeIDE/workspace_1.4.0/STM32F407VE_TEST/Debug/../Core/Src/font20.c:87: multiple definition of `Font20_Table'
    Core/Src/font20.o:C:/Users/Admin/STM32CubeIDE/workspace_1.4.0/STM32F407VE_TEST/Debug/../Core/Src/font20.c:87: first defined here» , хотя в Keil проект прошился без ошибок.
    В файле spi_ili9341.с пришлось закомментировать все подключения
    //#include «font24.c»
    //#include «font20.c»
    //#include «font16.c»
    //#include «font12.c»
    //#include «font8.c»
    и контроллер прошился после этого без ошибок.

  5. Rintaro:

    Почему-то у меня заливки работают быстро, а те функции, что требуют вычислений работают крайне медленно, к примеру, чтобы закрасить весь экран линиями, нужно где-то пол часа. Контроллер F407VE, CubeIde. Может быть это связано с тем, что я использую stdlib вместо cstdlib?

  6. DVF:

    «потом применим DMA для того, чтобы сравнить, что нам даст эта периферия»
    И, где это «применим»?

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

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

*