Нарешті з'явилась вільна хвилина. Хочу закінчити "епопею" із TFT-shield (2.4) китайського виробництва. Як з'ясувалось в подібному форм-факторі може бути, як дисплей з контролером - ILI9325, так і з контролером ILI9341 . Зараз зупинимось на другому варіанті ILI9341 і підключенні його до МК STM32F103C8 . Ну і звісно, дамо робочий код для Keil.
В якості "заліза" мова піде, про плати китайського виробництва іменуємі в мережі як Maple Mini (це із опери ARDUINO), чи щось в цьому роді... Основна перевага цих плат - ціна. На платі встановлений МК STM32F103C8. Він має обєм флеша 64 кВ, та може працювати на частоті до 72 МГц.
Спочатку я спробував переробити бібліотеку від ILI9325 , під ILI9341 . Та повністю перенести всі функціі мені не вдалось, так само як і прочитатти ID дисплея. А далі все це задоволення було закинуто в "довгий ящик", поки на очі не потрапив ось цей - матеріал . Там можна знайти код від китайських продавців "DIY-крамом"...для Ардуіни та STM32, а також деяка технічна документація на дисплей.
Перше, що я зробив ,це "пересадив" код з STM32F103RCT6 на STM32F103С8T6 під Keil 5.
Друге. Зробив саморобний перехідник для шилда, на "нормальні" провода
Підєднав до плати МК. Зробив окремо живлення 3,3В на МС 1117, для дисплея, оскільки вмонттований в плату МК не надто потужний. Заживлено стабілізатор від USB.
Запускаємо... В такому вигляді код, на реальному STM32, запускався через раз. Не завжди проходила ініціалізіція. Звіривши цю функцію із datasheet я побачив багато "лишнього" в кодові. При цьму код для Arduino(Atmega328) працював завжди і без глюків. Вихід було знайдено, функція ініціалізаціі була списана із Ардуіно-проекта. Все запрацювало, "глюки відійшли"...
Далі слід звернути увагу на функцію установки параметрів дисплея. Оскільки в lcd.h у нас #define USE_HORIZONTAL 1, то орієнтація дисплея горизонтальна. В мене нормальні (не зеркальні букви) получились для регістра Memory Access Control (36h) при значенні 0xEC.
void LCD_SetParam(void)
{
lcddev.wramcmd=0x2C;
#if USE_HORIZONTAL==1
lcddev.dir=1;
lcddev.width=320;
lcddev.height=240;
lcddev.setxcmd=0x2A;
lcddev.setycmd=0x2B;
//LCD_WriteReg(0x36,0x6C);
LCD_WriteReg(0x36,0xEC);
#else
lcddev.dir=0;
lcddev.width=240;
lcddev.height=320;
lcddev.setxcmd=0x2A;
lcddev.setycmd=0x2B;
LCD_WriteReg(0x36,0xC9);
#endif
}
В кінці datasheet , в пункті 9.3. MCU to memory write/read direction (стр.207-208) - дано пояснення для різних варіантів орієнтаціі дисплея.
І на останок робочий демо проект для Keil 5 - http://radiomanoff.at.ua/load/stm32f103_tft2_4/1-1-0-38 .
|