Середа, 24.04.2024, 22:55
Приветствую Вас Гість | RSS

Radiomanoff+

Меню сайта
Форма входа
Календарь
«  Квітень 2024  »
ПнВтСрЧтПтСбНд
1234567
891011121314
15161718192021
22232425262728
2930

TFT-shield (2.4) & STM32L DISCOVERY

 

Еще один 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
      }
    }

В моем случае ,при отладке в KEIL получилось следующее :
 
 
В источнике https://elty.pl/pl/n/3 имеется такая таблица ,откуда выходит ,что контролер в моем LCD - ILI9325 
 
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 для STM32F103C8tft_shield_2_4_stm32f103c8 .

           

Архив записей
Статистика

Онлайн всього: 1
Гостей: 1
Користувачів: 0