Еще один LCD в моей "копилке".Предназначен для Arduino (соответствующее расположение пинов),причем качество изготовления шилда ,мягко говоря - неочень...Хотя на мой взгляд,за те деньги ,за которые я купил "девайс",он является хорошей альтернативой всяким цветным дисплеям от мобильных телефонов (в которых надо паять шлейфа) + немаловажная деталь слот для SD-карты.Купил чисто поиграться - подключить его к STM32.Подключается шилд по 8-ми битной шине. Продавец утверждал о наличии встроеного контролера st7781.Но на практике оказался ILI9325.
Вообще с контролером LCD поначалу были полные непонятки,"китай" знаете ли...Пока разобрался ,пришлось оснавательно проштудировать инет.Сначала работал с платой STM32F4 Discovery ."Перелопатил" немало примеров,которые удалось вытянуть из сети.Остановился на варианте http://pastebin.com/wbn9Eqpx .Его основным достоинством ,на мой взгляд,является простота (без всяких там FSMC и ОС) - простой "ногодрыг".
Также подключал дисплей к плате STM32F4 Discovery через FSMC,без ОС (https://github.com/stm32f4/library/tree/master/ILI9325).Код работает...
Дабы не мучить F4 Discovery,своими эксперементами - решил перейти на платформу STM32L Discovery .На плате установлен микроконтролер STM32L152RBT6,в котором отсутсвует интерфейс FSMC.Хотя ,к слову, он имеется на более "мощных" чипах L-серии,например плата STM32L152-EVAL (Evaluation board for STM32L1 series - with STM32L152VB MCU).Поэтому в качестве основы использовал код http://pastebin.com/wbn9Eqpx.
Первое ,что я зделал - это разогнал STM32L Discovery до максимальных 32 МГц,от встроеного генератора (на плате не установлен кварцевый резонатор),следуя рекомендациям отсюда http://chipspace.ru/stm32l-max-sysclk/.Скорость работы LCD зависит от скорости МК.Это особенно заметно после перехода с STM32F4 Discovery (168 МГц) на STM32L Discovery (32 Мгц) ...
Сам код с источника http://pastebin.com/wbn9Eqpx ,я разделил на два файла TFT_lcd.с и TFT_lcd.h ,также в библиотеке имеется файл шрифта font.h .
Кроме того код позволяет посмотреть ,на каком контролере работает LCD.В функции init файла TFT_lcd.с ,за это отвечают строки
IC_CODE = readRegister(0x0);
if(!IC_CODE)
{
while(!IC_CODE)
{
IC_CODE = readRegister(0x0); //WAIT UNTIL KNOWN LCD
}
}
Device Code | Kontroler | Wyświetlacz |
0x9320 | ILI9320 | |
0x9325 | ILI9325 | |
0x9328 | ILI9328 | |
0x9331 | ILI9331 | |
0x8999 | SSD1298 | |
0x8989 | SSD1289 | ITDB02-3.2S, HY32D |
0x7783 | ST7781 | |
0x4531 | LGDP4531 | |
0x5408 | SPFD5408B | |
0x1505 0x0505 | R61505U | |
0x0046 | HX8346A | |
0x0047 | HX8347D | |
0x0047 | HX8347A | |
0x4535 | LGDP4535 | |
0x9919 | SSD2119 | |
0x0052 | HX8352-A | ITDB02-3.2WD |
0x1121 | S1D19122 | ITDB02-2.4E |
Далее, еще одни "грабли" на которые я попал .Пин RESET LCD должен быть поключен к пину NRST платы Discovery.
Кроме того, пины LCD_PINS (D0...D8) подключены к одному порту.Так-же к одному порту поддключены пины LCD_CONT .В моем случае LCD_PINS (D0...D8) - порт С , LCD_CONT (CS ,RS , WR ,RD) - порт В .Пины прописываются в файле TFT_lcd.h :
#define LCD_IOP GPIOB //LCD_PINS
#define LCD_CTP GPIOC //LCD_CONT
#define LCD_PINS (GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15)
#define LCD_CONT (GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3)
#define CS GPIO_Pin_0
#define RS GPIO_Pin_1
#define WR GPIO_Pin_2
#define RD GPIO_Pin_3
Схема подключения :
Саму библиотеку пришлось немного переделать.Дело в том ,что функция drawString ,которая отвечает за вывод строки пригодна разве,что для разового вывода символов.На практике ,при выводе , например постоянно меняющейся переменной, один символ накладывается на другой.Для себя решение нашел в том,что прежде чем вывести символ, место под него закрашивается под цвет фона .В программе появились две новые функции , которые я назвал drawChars и drawStrings .Теперь кроме цвета сивола, нужно указать цвет фона ,например:
drawStrings("Hello World",10,10, 2, WHITE, BLACK);
где WHITE - цвет символа ;
BLACK - цвет фона ;
Это хотя полностью и не решает проблему (заметно некоторое мерцание), но все же позволяет работать с переменными.Далее предлагаю сообществу тестовый проект, где кроме стандартных функций вывода символов и геометрических фигур, организован вывод на экран дисплея часов реального времени (встроеных в STM32L).
Cсылка на проект для Keil 5 - http://radiomanoff.at.ua/load/tft/1-1-0-26 .
PS. Вообще-то библиотека нуждается в некоторой доработке,заинтересованых милости прошу на форум - http://radiomanoff.at.ua/forum/4-1-1.
WARNING !!! Осторожно. Попался точно такой-же "шилд" , но с контролером ILI9341.
О его подключении к STM32L Discovery во второй части - tft_shield_2_4_stm32l_discovery_part_2 .
P.S.A также рабочий код для Keil 5 для STM32F103C8 - tft_shield_2_4_stm32f103c8 .