STM Урок 37. Дисплей TFT 240×320 8bit. Часть 9



Урок 37

Часть 9

 

Дисплей TFT 240×320 8bit

 

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

Сегодня мы продолжим данную работу.

Напишем прототип этой функции.

 

 

Добавим тест для вывода картинок на экран опять же в теле функции FileReadWrite

 

                        TFT9341_SetRotation(i%4);

                        }

                        TFT9341_SetRotation(0);

                        TFT9341_DrawBitmap(0, 0, «001.bmp»);

                        HAL_Delay(5000);

                        TFT9341_DrawBitmap(0, 0, «002.bmp»);

                        HAL_Delay(5000);

                        TFT9341_DrawBitmap(0, 0, «003.bmp»);

                        HAL_Delay(5000);

                        TFT9341_DrawBitmap(0, 0, «004.bmp»);

                        HAL_Delay(5000);

                        TFT9341_DrawBitmap(0, 0, «005.bmp»);

                        HAL_Delay(5000);

                        TFT9341_DrawBitmap(0, 0, «006.bmp»);

                        HAL_Delay(5000);

                        TFT9341_DrawBitmap(0, 0, «007.bmp»);

                        HAL_Delay(5000);

                        TFT9341_DrawBitmap(0, 0, «008.bmp»);

                        HAL_Delay(5000);

                        TFT9341_DrawBitmap(0, 0, «009.bmp»);

                        HAL_Delay(5000);

                        TFT9341_DrawBitmap(0, 0, «010.bmp»);

                        HAL_Delay(5000);

                        TFT9341_DrawBitmap(0, 0, «011.bmp»);

                        HAL_Delay(5000);

                        TFT9341_DrawBitmap(0, 0, «012.bmp»);

                        HAL_Delay(5000);

                        TFT9341_DrawBitmap(0, 0, «013.bmp»);

                        HAL_Delay(5000);

                        TFT9341_DrawBitmap(0, 0, «014.bmp»);

                        HAL_Delay(5000);

                        TFT9341_DrawBitmap(0, 0, «015.bmp»);

                        HAL_Delay(5000);

                        TFT9341_DrawBitmap(0, 0, «016.bmp»);

                        HAL_Delay(5000);

                        TFT9341_DrawBitmap(0, 0, «017.bmp»);

                        HAL_Delay(5000);

                        TFT9341_DrawBitmap(0, 0, «018.bmp»);

                        HAL_Delay(5000);

                        TFT9341_DrawBitmap(0, 0, «019.bmp»);

                        HAL_Delay(5000);

                        TFT9341_DrawBitmap(0, 0, «020.bmp»);

                        HAL_Delay(5000);

                        TFT9341_DrawBitmap(0, 0, «021.bmp»);

                        HAL_Delay(5000);

                        TFT9341_DrawBitmap(0, 0, «022.bmp»);

                        HAL_Delay(5000);        

 

 

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

 

image15

 

Таким же самым образом выводятся и все остальные рисунки. Весь тест вы увидите в видеоверсии, прикрепленной ниже.

Раскомментируем предыдущие тесты и проверим код полностью.

 

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

 

Исходный код

 

Cодержимое FLASH Drive

Техническая документация на контроллер дисплея

 

 

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

STM32F4-DISCOVERY

Дисплей LCD 20×4

Где приобрести именно такой дисплей TFT 240×320, написать затрудняюсь, так как может прийти не всегда именно такой дисплей, какой заявлен в продаже. Либо придет подключаемый по SPI, либо с другим контроллером. Поэтому все тонкости уточняйте у продавца.

 

 

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

 

STM Дисплей TFT 240x320 8bit

22 комментария на “STM Урок 37. Дисплей TFT 240×320 8bit. Часть 9
  1. Валерий:

    Владимир, добрый день! Спасибо за Ваши уроки, весьма полезные и качественные. Есть пожелание — оставляйте промежуточный код в частях урока, так проще с ними разбираться на пути освоения урока. При попытке повторить данный урок, я столкнулся с тем что у меня идет только часть теста графики и не идет часть с текстом и я уже не говорю о катрике. А урок весьма важный и полезный! И весьма интересна как сама шина, так ещё более интересен контроллер ILI9341!

  2. Валерий:

    Да и к тому же Ваш пример сильно мне помог! Я им проверял полученные дисплеи! И только 3-й дисплей оказался не бракованным и с нужным контроллером, хотя все заявляли что у них ILI9341! Спасибо!

  3. Алексей:

    а без LCD дисплея будет работать? Что-то подсветка горит, а картинки нет

  4. Игорь:

     

    Здравствуйте , Возникли проблемы по работе с данным дисплеем,

    У меня другая плата и команды Chip Select я выбрал NE4, команду LCD Register Select на A6

    1) Вопрос про вот эти значения откуда они берутся?

    #define ADDR_CMD *(uint8_t*)0x60000000

    #define ADDR_DATA *(uint8_t*)0x60010000

    2) в файле ili9341.c ругается на строку extern void Error_Handler(void);

    3) Обязательно ли подключать вывод RES на дисплее?  дело в том что у меня этот вывод идет на кнопку ресет.

  5. Илья:

    Очернь понравились уроки, дисплей с али заработал без проволочек

     Прошу не этом не останавливаться и например сделать урок гле, например, stm будет по дисплею крутить видео снятое на какой нить нокии 2690

    • Это нужен будет как минимум STM32F769, который поддерживает аппаратное декодирование JPEG.

      • Илья:

        так ведь там h263

         

        вот пример видео, очень старое

        https://yadi.sk/i/IYWyyTAh3MYYeR

         

        STM может потянуть такое?

         

        сведения их mediainfo

        Video
        ID                          : 1
        Format                      : H.263
        Format profile              : BaseLine@1.0
        Codec ID                    : s263
        Duration                    : 58 s 187 ms
        Bit rate                    : 69.9 kb/s
        Width                       : 176 pixels
        Height                      : 144 pixels
        Display aspect ratio        : 1.222
        Original display aspect rat : 4:3
        Frame rate mode             : Variable
        Frame rate                  : 9.796 FPS
        Minimum frame rate          : 1.458 FPS
        Maximum frame rate          : 43.388 FPS
        Color space                 : YUV
        Chroma subsampling          : 4:2:0
        Bit depth                   : 8 bits
        Compression mode            : Lossy
        Bits/(Pixel*Frame)          : 0.281
        Stream size                 : 496 KiB (83%)
        Writing library             : hant
        Language                    : English
        Encoded date                : UTC 2016-10-10 11:57:06
        Tagged date                 : UTC 2016-10-10 11:57:06

        Audio
        ID                          : 2
        Format                      : AMR
        Format/Info                 : Adaptive Multi-Rate
        Format profile              : Narrow band
        Codec ID                    : samr
        Duration                    : 58 s 320 ms
        Bit rate mode               : Constant
        Bit rate                    : 12.8 kb/s
        Channel(s)                  : 1 channel
        Sampling rate               : 8 000 Hz
        Bit depth                   : 13 bits
        Stream size                 : 91.1 KiB (15%)
        Writing library             : Nokia
        Language                    : English
        Encoded date                : UTC 2016-10-10 11:57:06
        Tagged date                 : UTC 2016-10-10 11:57:06

        • Anrey:

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

          по хорошему, если ног не жалко то буфером пусть будет внешняя быстрая микросхема из которой контроллер просто будет читать в дисплей то есть это должно работать так: контроллер раскодирует видео и помещает в буфер, дальше из буфера прогоняет и снова

          кстати дисплеи часто комплектуются халявным тачскрином который сам по себе неплох и если мы увидим статью по применению этого тач скрина то это думаю будет очень даже неплохо

  6. Михаил:

    Добрый день. Отличный урок.

    Только есть один вопрос: как происходит совмещение логических уровней? 

    Ведь дисплейчик работает в пятивольтовой логике, а АРМ — в трехвольтовой. Может я что-то не заметил в Вашем уроке? Объясните, пожалуйста.

    • Здравтсвуйте!
      Да всё нормально там работает. Дисплей работает от 3 вольт. От 5 вольт работает подстветка. Вроде так. Ну если что как правило производители делают ножки толерантными к более низким уровням.

      • Михаил:

        Спасибо.  А то видел у какого-то итальянца, он отпаивал стабилизатор и шины на 3,3 и 5 вольт закорачивал, когда подключал к STM. Типа, это фича такая с этим дисплейчиком и STM.

        У Вас отличные уроки.

  7. Артём:

    Добрый вечер.
    Нужно бы урок с подключением touchscreen у этого шилда.

  8. Сергей:

    Подскажите такой вопрос: имеется подобный дисплей на контроллере LS022 (8ми битный интерфейс). Вот только уровни сигналов в нем 1,8В. Собрал на резисторных делителях напряжения + добавил индикаторы в виде светодиодов (D0-D7, RW, RS). Если дрыгать пинами все команды вручную — светодиоды светятся, дисплей работает, но медленно. Попробовал задействовать Ваш вариант с FSMC — кроме ресета — ничего на индикаторах нет. Функцию чтения с контроллера не использую — понятно, что связь через делители односторонняя — передаю команды и данные на дисплей. Может ли в этом быть причина?

    • Трудно сказать, я так не пробовал.

      • Anrey:

        кстать такая фича наблюдалась и у меня — я сначала не мог сосчитать ID дисплея у меня был бред типа FEFEFEFEF… ACACA0AC0C… а если чуть увеличить тайминги — на 2 то ID считывается как ему положено 00009341. На картинка на дисплей выходит сыпанной, либо вообще какой-то сеткой покрыта и видно что часть пикселей отображается неправильно или вообще не отображается. Это исправляется подключением шины данных через витую пару и запайкой резистора 200…500 ом между контактами 5V и RW

  9. Огромнейшее вам СПАСИБО!!! Почти разобрался (подключил ili9486_8bit к stm43f407vet6, читаю шрифт и картинки с SD карты, инициализацию переделал взяв команды с WIKI LCD и подключил А18 вместо А16) Ваши картинки рисует но в пол экрана это понятно, разрешение другое, а вот свою вывести не могу.Подскажите чем и как перегнать, и какие шрифты можно взять мне нужно покрупнее.Еще раз СПАСИБО!!!

  10. Sergey_M:

    Здравствуйте!А можно ускорить вывод картинок на 407 контроллере?
    дисплей 480х800.уж очень медленно.на авр так выводит.Заранее большое спасибо!

  11. Николай:

    У меня на дисплее не разведен вывод rd считать id невозможно. Есть ли какой нибудь способ узнать наверняка, доходят ли команды до дисплея. Инициализация с Ардуино не заводит экран

    • Николай:

      нашёл способ. отправил тупо в лоб
      void lcd_init(void)
      {
      TFT9341_reset();
      LCD_Write_COM(0x11); // Sleep OUT
      HAL_Delay(50);
      LCD_Write_COM(0x29);
      }
      закрасил половину экрана чёрным, остались куски белых пикселей.
      теперь точно знаю что команды доходят

  12. Добрый день!
    Подскажите по шрифтам, 32 размер или более есть у Вас?
    Отдельно можете ссылку на шрифты сделать?
    Спасибо за труд!!!

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

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

*