Прикручиваем STM32 к TFT дисплею на основе контроллера HX8352
Вот решил испытать как оно будет работать, ну и заодно поделится авось кому интересно :) Значится так, подключаем мы этот TFT по 8-ми битной шине, ага, совсем забыл уточнить модель LCD, вот он - 3.2-st032d6c-e00. Ну приступим, схема подключения очень простая и поэтому схему не привожу да и нет ее у меня, не рисовал :) Шина данных ЖК подключается на выводы PA0-PA7, остальное в таком порядке:
CS - PC5 RS - PB0 WR - PB9 RD - PC4 RESET - PB1
Распиновку LCD можно посмотреть по линку который я привел выше, даташит на контроллер тоже там. Ну вот, подключили. Теперь начинаем писать чудо программу в IAR, я пропущу создание проекта так как это очень хорошо расписано тут -STM32-VLDiscovery: мой вариант быстрого старта. Далее настраиваем выводы как нам нужно:
PA.0-PA.7 на выход - GPIOA->CRL = 0x11111111; //PORTA.0-PORTA.7 Push-pull output 10MHz
ну и остальные тоже все на выход включая контрольный светодиод, кстати про GPIO очень просто и понятно написано сдесь и там же.
/************************************************************************************* Project : HX8352 Driver Version : 1.0 Author : Left Radio Comments:
Chip type : Program type : Application Clock frequency : 24,000000 MHz **************************************************************************************/
#include "colors 5-6-5.h"
#define uchar unsigned char #define uint unsigned int #define ushort unsigned short
Поехали дальше, после инициализации портов ввода/вывода нужно проинициализировать сам ЖК, это делает функция LCD_Init(void), расписывать ее не буду, кто хочет сам разберется по даташиту.
Ну вот и все, осталось начать рисовать :), делается это так, устанавливаем курсор в нужную позицию дисплея - LCD_SetCursor(uchar x, ushort y), и просто посылаем байт за байтом в ЖК, контроллер в ЖК сам изменяет позицию курсора при приеме очередного 16-битного значения цвета точки, а так как у нас 8-ми битный интерфейс к ЖК, то нам приходится на одну точку посылать два байта. Считаем, 240 точек умножить на 400, получаем 96000 точек, то есть нам нужно послать 192000 байтов что бы полностью закрасить экран ЖК, что и делается в функции LCD_FillScreen(uint color), принимаемый аргумент - цвет заливки. Если же нам например требуется просто нарисовать две точки по разным координатам, то нужно установить курсор в нужную позицию для первой точки, послать два байта цвета, потом опять установить курсор на новые необходимые координаты и опять послать два байта цвета уже для этой точки. Ага, чуть не забыл почти самое важное :), формат цвета принимаемый ЖК это 5-6-5, 5 бит на синий, 5 на красный и шесть на зеленый. Вот такая вот дискриминация по цвету даже тут :). Это на самом деле очень неудобно, например когда нужно отобразить на ЖК цвет например из граф. редактора на ПК, и после некоторых моих мучений родилась простенькая утилита для конвертации RGB(8-8-8-8, последняя восьмерка это альфа канал) в 5-6-5 для этого LCD
Написана она в Visual C# от мелкософта и умеет конвертировать выбранный одиночный цвет, 256-ти цветовою гамму и 256 оттенков серого сразу генерируя, для вставки в код, массив из 256-ти значений. Если есть какие предложения по навешиванию функционала пишите, пока мне и этого вполне хватало.
Думаю на этом и остановимся, а напоследок небольшое видео, МК просто заливает одним цветом ЖК, подряд по гамме. Замечу, хоть на видео и не сильно заметны смены кадров на ЖК, но в реальности очень заметно и анимированную картинку перерисовывая весь экран получить не выйдет, точнее выйдет, но медленно, всего около 10 кадров за сек., думаю если заменить STM32F100 на STM32F103 и подключится к этому ЖК по 16-ти битной шине будет намного быстрее но бесполезно так как все равно видны смены кадров из-за асинхронности вычитки внутренней памяти контроллером ЖК и ее заполнением микроконтроллером. На плате STM32VLDISCOVERY использован вывод PA0 так что кнопку USER использовать нельзя, так же задействованы светодиоды, зеленый горит каждый второй кадр, синий каждый десятый.
Готовый проект для STM32VLDISCOVERY под IAR - project.rar, так как это писалось сразу в расчете на новую версию осцилла, то и называется в IAR-е NeilScope3, так что не пугайтесь :)
Все, всем спасибо :) , вопросы если есть можно на форум.
Благодарю. У меня вот такая штука http://www.ebay.com/itm/3-2-inch-TFT-LCD-Module-Display-Touch-Panel-SD-card-cage-/230684823376?pt=LH_DefaultDomain_0&hash=item35b5e30f50 и я собbраюсь подключить ее к STM32L-DISCOVERY board с вашей помощью Пока только подпаялся и проверил подсветку дисплея Щас начну копаться в вашем проекте.