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

 

 

 

Урок 37

Часть 1

 

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

 

 

Сегодня мы к контроллеру STM32 попробуем подключить дисплей TFT разрешением 240×320. Модуль дисплея выполнен на контроллере ILI9341 и подключается посредством 8-разрядной шины и подключать мы его будем, используя технологию FSMC. Это технология, позволяющая работать с контроллером дисплея, как с обычной памятью, не заботясь также о том, какой управляющей ножкой и когда дрыгать.

По данному дисплею у меня есть также урок для контроллера AVR. Советую его также просмотреть. После этого вам станет намного понятнее работа с ним.

Проект создаём из проекта USB_HOST_MSC_FATFS. Назовем его ILI9341. Запустим проект в Cube, отключим вывод PD7 и PD14, иначе мы не включим FSMC.

 

image01  image03

 

Включим FSMC следующим образом

 

image02

 

Теперь мы видим, к каким ножкам контроллера какие ножки дисплея подключать

Также у контроллера есть лапка для перезагрузки (LCD_RST). Для управления данной лапкой дисплея включим лапку порта PD6 на выход.

 

image05

 

В Configuration в FSMC включим следующие тайминги

 

image04

 

Также включим RNG для нормального формирования случайного числа

 

image00

 

Сгенерируем проект, откроем его, подключим lcd.c. Соберем проект и настроим программатор.

Создадим и добавим файлы ili9341.c и ili9341.h в соответствующие директории src и inc

Подключим файл в main.h

#include "lcd.h"

#include "ili9341.h"

 

#endif /* MAIN_H_ */

Его же подключим и в ili9341.c

#include "ili9341.h"

 

 

Стандартным образом заполним данный файл и подключим в него необходимые библиотеки

 

#ifndef ILI9341_H_

#define ILI9341_H_

 

#include <stdlib.h>

#include "stm32f4xx_hal.h"

#include "lcd.h"

#include "fatfs.h"

 

#endif /* ILI9341_H_ */

 

Объявим переменные адресов для данных и команд в файл ili9341.h

 

#include "fatfs.h"

 

#define ADDR_CMD        *(uint8_t*)0x60000000

#define ADDR_DATA        *(uint8_t*)0x60010000

 

Добавим сюда же еще несколько макроподстановок

 

#define ADDR_DATA        *(uint8_t*)0x60010000

 

#define swap(a,b) {int16_t t=a;a=b;b=t;}

#define  RESET_ACTIVE   HAL_GPIO_WritePin(GPIOD, GPIO_PIN_6, GPIO_PIN_RESET);

#define  RESET_IDLE   HAL_GPIO_WritePin(GPIOD, GPIO_PIN_6, GPIO_PIN_SET);

 

#define  BLACK 0x0000

#define  BLUE 0x001F

#define  RED 0x0F800

#define  GREEN 0x07E0

#define  CYAN 0x07FF

#define  MAGENTA 0xF81F

#define  YELLOW 0xFFE0

#define  WHITE 0xFFFF

 

Добавим функцию инициализации дисплея в файл ili9341.c

 

#include "ili9341.h"

 

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

void TFT9341_ini(void)

{

}

 

Не забываем добавить прототип в хедер-файл.

Вызовем данную функцию в main.c

 

        LCD_Clear();

        TFT9341_ini();

  /* USER CODE END 2 */

 

В функции FileReadWrite оставим только вот это

 

/* USER CODE BEGIN 0 */

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

void FileReadWrite(void)

{

        if(f_mount(&USBDISKFatFs,(TCHAR const*)USBH_Path,0)!=FR_OK)

        {

                Error_Handler();

        }

        else

        {

        }

}

 

В файл ili9341.c добавим две функции для задержки

 

#include "ili9341.h"

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

void TFT9341_Delay(uint32_t dly)

{        

    uint32_t i;

    for(i = 0; i < dly; i++);

}

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

__STATIC_INLINE void DelayMicro(__IO uint32_t micros)

{

        micros *=(SystemCoreClock / 1000000) / 5;

        while (micros—);

}

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

 

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

 

image00_500

 

Как мы видим, у нас ещё подключен дисплей символьный через переходник по шине I2C для мониторинга считанного идентификатора.

Здесь мы также можем посмотреть дисплей с тыльной стороны, к каким ножкам у него подключены провода

 

image01

 

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

 

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

 

 

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

 

 

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

STM32F4-DISCOVERY

Дисплей LCD 20×4

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

 

 

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

 

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

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

    непотня как его подключить, шина данных ясно, а вотпин rs wr и rd  не ясно, где можно найти эту информацию?

    • Подробнее рассказано в уроке по avr. Видеоверсия на моём канале есть, а вот текстово-сайтовая вскоре также будет опубликована.

      А вообще rs — это переключение вида отправки информации (команда/данные)

      wr — запись

      rd — чтение

       

  2. Алексей:

    NOE -> RD

    NWE -> WR

    NE1 -> CS

    A16 -> RS

  3. Алексей:

    у Вас на двух чипах HC245  написано? на самом дисплеи?

  4. Алексей:

    на самом дисплеи у меня надпись сзади LMS241GF31 , но выглядит как Ваш один в один

     

  5. Алексей:

    А получается так тип контроллера не определить? Я отклеил экран, есть надпись HB90615010 и S241GF31, последнее это вроде тип дисплея.

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

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

*