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



Урок 37

Часть 2

 

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

 

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

Теперь начнём писать функции.

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

 

        while (micros—);

}

//—————————————————————

void TFT9341_SendCommand(unsigned char cmd)

{

        ADDR_CMD = cmd;

}

//—————————————————————

 

Данная функция получилась такой простой благодаря технологии FSMC.

 

 

Подобная функция будет для передачи данных в память контроллера дисплея

 

void TFT9341_SendData(unsigned char dt)

{

        ADDR_DATA = dt;

        TFT9341_Delay(1);

}

//—————————————————————

 

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

 

uint32_t TFT9341_ReadReg(uint8_t r)

{

        uint32_t id;

        uint8_t x;

        TFT9341_SendCommand(r);

        DelayMicro(50);

        x=ADDR_DATA;

        id=x;

        id<<=8;

        DelayMicro(1);

        x=ADDR_DATA;

        id|=x;

        id<<=8;

        DelayMicro(1);

        x=ADDR_DATA;

        id|=x;

        id<<=8;

        DelayMicro(1);

        x=ADDR_DATA;

        id|=x;

        if(r==0xEF)

        {

                id<<=8;

                DelayMicro(5);

                x=ADDR_DATA;

                id|=x;

        }

        DelayMicro(150);//stabilization time

        return id;

}

//—————————————————————

 

 

Добавим две переменные в файле ili9341.c

 

#include «ili9341.h»

//—————————————————————

uint16_t X_SIZE = 0;

uint16_t Y_SIZE = 0;

//—————————————————————

 

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

 

void TFT9341_SetRotation(unsigned char r)

{

        TFT9341_SendCommand(0x36);

        switch(r)

        {

                case 0:

                TFT9341_SendData(0x48);

                X_SIZE = 240;

                Y_SIZE = 320;

                break;

                case 1:

                TFT9341_SendData(0x28);

                X_SIZE = 320;

                Y_SIZE = 240;

                break;

                case 2:

                TFT9341_SendData(0x88);

                X_SIZE = 240;

                Y_SIZE = 320;

                break;

                case 3:

                TFT9341_SendData(0xE8);

                X_SIZE = 320;

                Y_SIZE = 240;

                break;

        }

}

//—————————————————————

 

Напишем на данную функцию прототип, он нам потребуется позже.

Напишем функцию перезагрузки дисплея

 

void TFT9341_reset(void)

{

        RESET_ACTIVE;

        HAL_Delay(2);

        RESET_IDLE;

        TFT9341_SendCommand(0x01); //Software Reset

        for (uint8_t i=0;i<3;i++)         TFT9341_SendData(0xFF);

}

//—————————————————————

 

Добавим ещё одну переменную

 

uint16_t Y_SIZE = 0;

uint32_t dtt=0;

 

Начнем писать инициализацию дисплея и попробуем считать его идентификатор

 

void TFT9341_ini(void)
{
    char str[10];
    TFT9341_reset();
    HAL_Delay(1000);
    dtt = TFT9341_ReadReg(0xD3);
    LCD_Clear();
    LCD_SetPos(0,0);
    sprintf(str,»0x%08lX»,(unsigned long)dtt);
    LCD_String(str);

 

Скомпилируем код, прошьём контроллер и посмотрим результат считывания идентификатора на символьном дисплее.

 

image02

 

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

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

 

 

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

 

 

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

 

 

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

STM32F4-DISCOVERY

Дисплей LCD 20×4

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

 

 

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

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

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

    Возвращает D3D3D3D3, было такое же с AVR — победил, уменьшив тактовую частоту AVR. А здесь не получается — при установке в CubeMx max(168) выдает D183A4. Понятно, по даташиту у ili9341 max обмен 45MHz. Cнизил частоту тактирования шины до 16MHz результат D3D3D3D3. Подскажите куда копать.

    • Денис:

      Михаил, а Вы просто уменьшили частоту изменив константу в проекте и поставили другой кварц ?
      Странно, у меня так же выдает D3D3D3D3, уже по вставлял небольшие задержки в подпрограммах сброса и чтения идентификатора

  2. reza eftekhari:

    very god
    very tanks
    you are my teacher
    I'm from Iran

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

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

*