26.06.2018, 02:04
|
|
Почётный гражданин KAZUS.RU
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
ILI9341 + stm32f103c8t6
Здравствуйте. Пробую запустить этот дисплей ILI9341. Но на дисплее не написано кто он, но он точно такой как Adafruit ILi9341. Красная плата сзади и с SD Card. Может кто запускал это помогите плиз. Вот Написал код чтоб считать ID дисплея но читает 0х45454545.
Запускаю без FSMC так как ее там нет и не работал с ней пока. Запускаю по 8-битной шине... SPI нет
|
|
|
|
26.06.2018, 03:27
|
|
Почётный гражданин KAZUS.RU
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
|
Re: ILI9341 + stm32f103c8t6
__________________
Глаза боятся,а руки делают.
Последний раз редактировалось CERGEI1982; 26.06.2018 в 03:58.
|
|
|
Сказали "Спасибо" CERGEI1982
|
|
|
26.06.2018, 06:41
|
|
Гражданин KAZUS.RU
Регистрация: 22.07.2007
Адрес: Владивосток
Сообщений: 984
Сказал спасибо: 435
Сказали Спасибо 375 раз(а) в 197 сообщении(ях)
|
Re: ILI9341 + stm32f103c8t6
Я так и не смог добиться от 9341 его идентификатора.
Не поленился нашел рар и распаковал Ваш архив.
Это вообще не похоже на заклинание инициализации. Вот заклинание:
Код:
|
void ILI9341_init(void) {
LCD_IDP=0x9341;
GPIO_SetBits(GPIOD, GPIO_Pin_7); //CS
GPIO_ResetBits(GPIOD, GPIO_Pin_11);//RS
GPIO_SetBits(GPIOD, GPIO_Pin_4); //-RD
GPIO_SetBits(GPIOD, GPIO_Pin_5); //-RW
//vci=2.8V
//Reset LCD Driver
GPIO_SetBits(GPIOE, GPIO_Pin_1);
delay_ms(10);
GPIO_ResetBits(GPIOE, GPIO_Pin_1);
delay_ms(100); //this delay time is necessary
GPIO_SetBits(GPIOE, GPIO_Pin_1);
delay_ms(100);
// Îòêðûòü Êðèñòàëë
Delay(200);
Delay(200);
LCD_WR_REG(207);
LCD_WR_DATA(0);
LCD_WR_DATA(217);
LCD_WR_DATA(48);
Delay(200);
LCD_WR_REG(237);
LCD_WR_DATA(100);
LCD_WR_DATA(3);
LCD_WR_DATA(18);
LCD_WR_DATA(129);
Delay(200);
LCD_WR_REG(232);
LCD_WR_DATA(133);
LCD_WR_DATA(16);
LCD_WR_DATA(120);
Delay(200);
LCD_WR_REG(203);
LCD_WR_DATA(57);
LCD_WR_DATA(44);
LCD_WR_DATA(0);
LCD_WR_DATA(52);
LCD_WR_DATA(2);
Delay(200);
LCD_WR_REG(247);
LCD_WR_DATA(32);
Delay(200);
LCD_WR_REG(234);
LCD_WR_DATA(0);
LCD_WR_DATA(0);
Delay(200);
LCD_WR_REG(192);
LCD_WR_DATA(33);
Delay(200);
LCD_WR_REG(193);
LCD_WR_DATA(18);
Delay(200);
LCD_WR_REG(197);
LCD_WR_DATA(50);
LCD_WR_DATA(60);
Delay(200);
LCD_WR_REG(199);
LCD_WR_DATA(193);
Delay(200);
LCD_WR_REG(54);
LCD_WR_DATA(8);
Delay(200);
LCD_WR_REG(58);
LCD_WR_DATA(85);
Delay(200);
LCD_WR_REG(177);
LCD_WR_DATA(0);
LCD_WR_DATA(24);
Delay(200);
LCD_WR_REG(182);
LCD_WR_DATA(10);
LCD_WR_DATA(162);
LCD_WR_REG(242);
LCD_WR_DATA(0);
Delay(200);
LCD_WR_REG(38);
LCD_WR_DATA(1);
Delay(200);
LCD_WR_REG(224);
LCD_WR_DATA(15);
LCD_WR_DATA(32);
LCD_WR_DATA(30);
LCD_WR_DATA(9);
LCD_WR_DATA(18);
LCD_WR_DATA(11);
LCD_WR_DATA(80);
LCD_WR_DATA(186);
LCD_WR_DATA(68);
LCD_WR_DATA(9);
LCD_WR_DATA(20);
LCD_WR_DATA(5);
LCD_WR_DATA(35);
LCD_WR_DATA(33);
LCD_WR_DATA(0);
Delay(200);
LCD_WR_REG(225);
LCD_WR_DATA(0);
LCD_WR_DATA(25);
LCD_WR_DATA(25);
LCD_WR_DATA(0);
LCD_WR_DATA(18);
LCD_WR_DATA(7);
LCD_WR_DATA(45);
LCD_WR_DATA(40);
LCD_WR_DATA(63);
LCD_WR_DATA(2);
LCD_WR_DATA(10);
LCD_WR_DATA(8);
LCD_WR_DATA(37);
LCD_WR_DATA(45);
LCD_WR_DATA(15);
Delay(200);
LCD_WR_REG(17);
Delay(200);
Delay(150);
LCD_WR_REG(41);
Delay(200);
{
unsigned int x, y, c;
//ini();
LCD_WR_REG(0x2A);
LCD_WR_Data(0 ›› 8);
LCD_WR_Data(0 & 0xFF);
LCD_WR_Data(240 ›› 8);
LCD_WR_Data(240 & 0xFF);
LCD_WR_REG(0x2B);
LCD_WR_Data(0 ›› 8);
LCD_WR_Data(0 & 0xFF);
LCD_WR_Data(320 ›› 8);
LCD_WR_Data(320 & 0xFF);
LCD_WR_REG(0x2C);
for (y=0;y‹320;y++) {
for(x=0;x‹240;x++) {
c = ((y ›› 3) ‹‹ 5) + (x ››3);
LCD_WR_Data(c );
LCD_WR_REG(0x3C);
Delay(10);
}
}
}
} |
|
|
|
|
26.06.2018, 08:36
|
|
Почётный гражданин KAZUS.RU
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: ILI9341 + stm32f103c8t6
Прикольно, но мне надо маленький. Да и другого нет и не хотелось бы ждать новый дисплей...
|
|
|
|
26.06.2018, 08:38
|
|
Почётный гражданин KAZUS.RU
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: ILI9341 + stm32f103c8t6
ampy, попробую ваш инит. Если ваш не заработает значит я гдето еще набокопорил.....
|
|
|
|
26.06.2018, 09:34
|
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,637
Сказал спасибо: 116
Сказали Спасибо 814 раз(а) в 591 сообщении(ях)
|
Re: ILI9341 + stm32f103c8t6
ampy, как-то у вас через задницу инициализация. Слабо по-человечески сделать? Организуем массив (в данном случае надо добавить еще и задержки) и — вуаля!
Жуткой нечитаемой копипасты не будет. И код меньше будет.
А если еще и сделать это как КА, то и тормозов никаких при инициализации дисплея не будет.
__________________
Союз Советских Социалистических Округов Северной Америки
|
|
|
|
26.06.2018, 09:43
|
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,637
Сказал спасибо: 116
Сказали Спасибо 814 раз(а) в 591 сообщении(ях)
|
Re: ILI9341 + stm32f103c8t6
Сообщение от CERGEI1982
|
https://www.youtube.com/watch?v=dZVb...m6N1l_hxTsUIlS
|
По ссылке вообще непонятная муть: чувак какую-то программку скачал, нарисовал в ней виджет и тот отобразился на дисплее. И где здесь "урок"? Глянул дальше — подобная лажа.
"учитель", блин! Минусовать его по полной за такие "уроки"...
__________________
Союз Советских Социалистических Округов Северной Америки
|
|
|
|
26.06.2018, 10:13
|
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,637
Сказал спасибо: 116
Сказали Спасибо 814 раз(а) в 591 сообщении(ях)
|
Re: ILI9341 + stm32f103c8t6
Сообщение от STM32F0
|
Не будет
|
Очень даже будет. Сравни 100500 вызовов функции с изменяющимися параметрами и один вызов этой функции в цикле, где параметры лежат в массиве.
Пример:
Нажмите, чтобы открыть спойлер
Код:
|
static const uint16_t ILI932x_regValues[] = {
ILI932X_START_OSC , 0x0001, // 0x00
TFTLCD_DELAY , 100,
ILI932X_DISP_CTRL1 , 0x0121, // 0x07
ILI932X_DRIV_OUT_CTRL , 0x0100, // 0x01
ILI932X_DRIV_WAV_CTRL , 0x0700, // 0x02
ILI932X_ENTRY_MOD , 0x0030, // 0x03
ILI932X_RESIZE_CTRL , 0x0000, // 0x04
ILI932X_DISP_CTRL2 , 0x0202, // 0x08
ILI932X_DISP_CTRL3 , 0x0000, // 0x09
ILI932X_DISP_CTRL4 , 0x0000, // 0x0A
ILI932X_RGB_DISP_IF_CTRL1, 0x0001, // 0x0C
ILI932X_FRM_MARKER_POS , 0x0000, // 0x0D
ILI932X_RGB_DISP_IF_CTRL2, 0x0000, // 0x0F
ILI932X_POW_CTRL1 , 0x16b0, // 0x10
ILI932X_POW_CTRL2 , 0x0007, // 0x11
ILI932X_POW_CTRL3 , 0x0138, // 0x12
ILI932X_POW_CTRL4 , 0x0b00, // 0x13
ILI932X_POW_CTRL7 , 0x0000, // 0x29
TFTLCD_DELAY , 200,
ILI932X_FRM_RATE_COL_CTRL, 0x0000, // 0x2B (100Hz)
TFTLCD_DELAY , 50,
ILI932X_GAMMA_CTRL1 , 0x0000, // 0x30
ILI932X_GAMMA_CTRL2 , 0x0000, // 0x31
ILI932X_GAMMA_CTRL3 , 0x0000, // 0x32
ILI932X_GAMMA_CTRL4 , 0x0206, // 0x35
ILI932X_GAMMA_CTRL5 , 0x0808, // 0x36
ILI932X_GAMMA_CTRL6 , 0x0007, // 0x37
ILI932X_GAMMA_CTRL7 , 0x0201, // 0x38
ILI932X_GAMMA_CTRL8 , 0x0000, // 0x39
ILI932X_GAMMA_CTRL9 , 0x0000, // 0x3C
ILI932X_GAMMA_CTRL10 , 0x0000, // 0x3D
ILI932X_GRAM_HOR_AD , 0x0000, // 0x20
ILI932X_GRAM_VER_AD , 0x0000, // 0x21
ILI932X_HOR_START_AD , 0x0000, // 0x50
ILI932X_HOR_END_AD , TFTWIDTH-1, // 0x51
ILI932X_VER_START_AD , 0x0000, // 0x52
ILI932X_VER_END_AD , TFTHEIGHT-1, // 0x53
ILI932X_GATE_SCAN_CTRL1 , 0x2700, // 0x60
ILI932X_GATE_SCAN_CTRL2 , 0x0001, // 0x61
ILI932X_GATE_SCAN_CTRL3 , 0x0000, // 0x6A
ILI932X_PANEL_IF_CTRL1 , 0x0010, // 0x90
ILI932X_PANEL_IF_CTRL2 , 0x0000, // 0x92
ILI932X_PANEL_IF_CTRL3 , 0x0003, // 0x93
ILI932X_PANEL_IF_CTRL4 , 0x0110, // 0x95
ILI932X_PANEL_IF_CTRL5 , 0x0000, // 0x97
ILI932X_PANEL_IF_CTRL6 , 0x0000, // 0x98
TFTLCD_DELAY , 50,
ILI932X_DISP_CTRL1 , 0x0133, // 0x07
};
uint16_t LCD_init(){
LCD_read_id();
if(LCD_id › 0x931f && LCD_id ‹ 0x932a){ // 932x
int i, s = sizeof(ILI932x_regValues)/sizeof(uint16_t);
for(i = 0; i ‹ s;){
uint16_t a = ILI932x_regValues[i++];
uint16_t b = ILI932x_regValues[i++];
if(a == TFTLCD_DELAY) Delay(b);
else write_reg(a, b);
}
uint16_t addr;
for(addr = 0x80; addr ‹ 0x86; ++addr)
write_reg(addr, 0);
}
return LCD_id;
} |
Но это — через задницу, потому что задержки очень большие при инициализации. Надо делать конечным автоматом.
// что за идиотский здесь движок, который не сворачивает длинные блоки кода? Я для ЛОРа подобный функционал черт-те когда реализовал в юзерскриптах.
__________________
Союз Советских Социалистических Округов Северной Америки
|
|
|
|
26.06.2018, 10:13
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: ILI9341 + stm32f103c8t6
Нет смысла заколдовывать дисплей, если нет рабочего интерфейса. Пока не получите верный ID, не теряйте время с чужими портянками говнокода.
|
|
|
|
26.06.2018, 10:16
|
|
Гражданин KAZUS.RU
Регистрация: 22.07.2007
Адрес: Владивосток
Сообщений: 984
Сказал спасибо: 435
Сказали Спасибо 375 раз(а) в 197 сообщении(ях)
|
Re: ILI9341 + stm32f103c8t6
Сообщение от eddy
|
ampy, как-то у вас через задницу инициализация. Слабо по-человечески сделать?
|
Это из примера к плате. Работает - не трогаю. Инициализация дело темное... Исследованию не подлежит. Да и вообще давно не брал в руки эту плату... Код особо меньше не будет (в смысле места занимать во флеши). Может и больше стать.
Там если переделывать то всё... Я только комменты с китайского перевел (не тут а в других местах).
В конце в скобках кажется уже идёт заполнение экрана.
А с идентификатором смешно было: скомпилированный код примера не работал - идентификатор дисплея не читался. Пришлось дизассемблировать прошивку, обнаружить там жестко прописанный тип дисплея, ну и прописать его в исходник. Перед этим понятно все мыслимые способы пробовались считать этот код... В общем лучше его знать заранее.
Последний раз редактировалось ampy; 26.06.2018 в 10:43.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 06:50.
|
|