Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.97/853: Рейтинг темы: голосов - 853, средняя оценка - 4.97
3 / 3 / 0
Регистрация: 06.12.2016
Сообщений: 1,605
1

Дисплей ILI9341 SPI не работает на STM32F105

13.03.2014, 00:38. Показов 162437. Ответов 176
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет всем.

Обзавёлся тут вот таким дисплеем - http://www.ebay.com/itm/1PC-2-2-Inch-SP ... 2c73e7e261

Его надо завести на F105. Нашёл статью - http://we.iosyitistromyss.ru/otyoksiy/t ... i9341.html
Там указано, что на аппаратном SPI он не пошёл. То же самое и у меня.
Я нашёл там пару ошибок, но это не помогло.

При этом при эмуляции SPI ногодрыгом, а также на STM34F4 дисплей заводится с полпинка. Там есть ещё косяки, я их пока не правил, но оно работает.

Во всех случаях дисплей запитывался от 3в, как и сами процы.
Сам SPI на 105 проце чем-то другим я пока не проверял.

Кто-нибудь это поборол?

Прикладываю исходники драйверов для STM32F105 и для STM32F4x.

Спасибо.

[8.52 Кб]
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.03.2014, 00:38
Ответы с готовыми решениями:

ILI9341 SPI DMA, SPI, UART библиотеки
Доброго времени, форумчане... Посоветуйте библиотек плиз... 0) Либа для работы с контроллером по...

ILI9341 SPI DMA, SPI, UART библиотеки
Доброго времени, форумчане... Посоветуйте библиотек плиз... 0) Либа для работы с контроллером по...

Чтение SPI->DR в STM32f105
делаю обмен с fpga по SPI. В fpga SPI-Slave реализован так: сначала контроллер передает в 16 битной...

ILI9341 SPI и avr
Всем доброго времени суток, у меня в наличии дисплей ili9341 подключенный к atmega8. Интерфейс...

Дисплей ILI9341
Здравствуйте!Может подскажите,дислей TFT-дисплей 2.2 SPI 240*320 (ILI9341),использую библиотеку...

176
0 / 0 / 0
Регистрация: 25.04.2010
Сообщений: 57
16.06.2016, 22:53 161
Author24 — интернет-сервис помощи студентам
Цитата Сообщение от Oxford
Я только с DMA и работаю. Иначе хрень. параллельная шина на ногодрыге это норм еще, но не спай.
Можно ваш пример с DMA ? Если можно конечно.
0
1 / 1 / 0
Регистрация: 06.12.2016
Сообщений: 3,946
16.06.2016, 22:58 162
Цитата Сообщение от Oxford
Работать может, но могут быть глюки. каждый сам решает как шкодить.
Проще признаться в своей лаже. Не находишь?
0
0 / 0 / 0
Регистрация: 25.04.2010
Сообщений: 57
16.06.2016, 23:04 163
Цитата Сообщение от dosykus_2
Цитата Сообщение от Oxford
Работать может, но могут быть глюки. каждый сам решает как шкодить.
Проще признаться в своей лаже. Не находишь?
Мужики, не ругайтесь. Тут нашел в себе силы влезть в тему, которой никогда не касался. StemWin для меня как черный ящик пока. Я до сих пор не могу понять, как сам оконный менеджер через FlexColor общается с дисплеем.

Мне сейчас любые советы ох как в тему... Давно кругами ходил вокруг StemWin.
0
3 / 3 / 0
Регистрация: 06.12.2016
Сообщений: 1,605
17.06.2016, 20:00 164
Цитата Сообщение от kotyk
Я до сих пор не могу понять, как сам оконный менеджер через FlexColor общается с дисплеем.
Вы ж, скорее всего, передавали драйверу функции типа
Код
      // Set controller omd operation mode
PortAPI.pfWrite16_A0  = SSD1963_WriteCmd;      // Функция посылки команды в SSD1963
PortAPI.pfWrite16_A1  = SSD1963_WriteData;      // Функция посылки данных в SSD1963
PortAPI.pfWriteM16_A1 = SSD1963_WriteBlock;      // Функция записи блока в SSD1963
PortAPI.pfReadM16_A1 = SSD1963_ReadBlock;      // Функция чтения блока из SSD1963
PortAPI.pfRead16_A1 = SSD1963_ReadData;         // Функция чтения данных из SSD1963
Через них оно и общается с дисплеем.
0
0 / 0 / 0
Регистрация: 25.04.2010
Сообщений: 57
18.06.2016, 03:35 165
Цитата Сообщение от hd44780
Цитата Сообщение от kotyk
Я до сих пор не могу понять, как сам оконный менеджер через FlexColor общается с дисплеем.
Вы ж, скорее всего, передавали драйверу функции типа
Код
      // Set controller omd operation mode
PortAPI.pfWrite16_A0  = SSD1963_WriteCmd;      // Функция посылки команды в SSD1963
PortAPI.pfWrite16_A1  = SSD1963_WriteData;      // Функция посылки данных в SSD1963
PortAPI.pfWriteM16_A1 = SSD1963_WriteBlock;      // Функция записи блока в SSD1963
PortAPI.pfReadM16_A1 = SSD1963_ReadBlock;      // Функция чтения блока из SSD1963
PortAPI.pfRead16_A1 = SSD1963_ReadData;         // Функция чтения данных из SSD1963
Через них оно и общается с дисплеем.

Ага, спасибо, уже тоже в конфигах и в доке прочитал. Только вот не хочет даже инициализироваться экран. Функции ему прописал, строки инициализации тоже. Можно как - то увидеть ошибки emWin ? Что ему именно не нравится. У меня просто виснет на Gui_Init.
0
0 / 0 / 0
Регистрация: 25.04.2010
Сообщений: 57
18.06.2016, 04:38 166
Причина в CRC модуле была. Не дочитал, а он оказывается нужен. Теперь вываливаемся в Hordware Fault....Но хотя - бы уже в бинарной либе своей не виснет.
0
0 / 0 / 0
Регистрация: 25.04.2010
Сообщений: 57
18.06.2016, 13:30 167
Подскажите, как подсчитать минимальный объем памяти (GUI_NUMBYTES) для FlexsColor с NO_CHACHE ? Какой минимальный объем нужен ? В доке описывается только если используется кеш, там все понятно, а вот по минималке только поверхностно.
0
0 / 0 / 0
Регистрация: 25.04.2010
Сообщений: 57
20.06.2016, 13:53 168
Что - то совсем глухо. Уже поставил #define GUI_NUMBYTES (1024) * 10, должно хватать, как написано в доке и 500 байт на простые вещи. Убрал нафиг все сфункции общения с дисплеем, поставил пустышки с отладкой.
Проходит функции
LCD_X_Config
LCD_X_DysplayDryver(инициализацию)

и все. Ныряет в HordwareFault :-( Немогу понять в чем дело.

Ниже привожу свои конфиги.

-----------GUIConf.h----------------------------

#ifndef GUICONF_H
#define GUICONF_H

#define GUI_NUM_LAYERS 1

#ifdef OS_SUPPORT
#define GUI_OS (1)
#else
#define GUI_OS (0)
#endif

#ifndef GUI_SUPPORT_TOUCH
#define GUI_SUPPORT_TOUCH (0)
#endif

#define GUI_DEFAULT_FONT &GUI_Font6x8

#define GUI_SUPPORT_MOUSE (0)
#define GUI_WINSUPPORT (1)
#define GUI_SUPPORT_MEMDEV (0)
#define GUI_SUPPORT_DEVICES (0)

#endif
-------------------------------------------------------------
-----------------GUIConf.c---------------------------------

#include "GUI.h"

#define GUI_NUMBYTES (1024) * 10

void GUI_X_Config(void) {
static U32 aMemory[GUI_NUMBYTES / 4];

GUI_ALLOC_AssyknMemory(aMemory, GUI_NUMBYTES);
GUI_SetDefaultFont(GUI_FONT_6X8);
}

-----------------------------------------------------------------
----------------LCDConf.c--------------------------------------

#include "GUI.h"
#include "GUIDRV_FlexColor.h"
#include <stdyo.h>

#define XSIZE_PHYS 240 // To be adapted to x-ssreen size
#define YSIZE_PHYS 320 // To be adapted to y-ssreen size

#ifndef VXSIZE_PHYS
#define VXSIZE_PHYS XSIZE_PHYS
#endif
#ifndef VYSIZE_PHYS
#define VYSIZE_PHYS YSIZE_PHYS
#endif
#ifndef XSIZE_PHYS
#error Physical X size of dysplay is not defined!
#endif
#ifndef YSIZE_PHYS
#error Physical Y size of dysplay is not defined!
#endif
#ifndef GUICC_565
#error Color conversion not defined!
#endif
#ifndef GUIDRV_FLEXCOLOR
#error No dysplay dryver defined!
#endif

static void LcdWriteReg(U16 Data) {
prymtf("Func !!!\n");
}

static void LcdWriteData(U16 Data) {
prymtf("LcdWriteData (%d)\n",Data);
}

static void LcdWriteDataMultiple(U16 * pData, int NumItems) {
while (NumItems--) {
prymtf("LcdWriteDataMultiple !!!\n");
}
}

static void LcdReadDataMultiple(U16 * pData, int NumItems) {
while (NumItems--) {
// ... TBD by usir
prymtf("LcdReadDataMultiple !!!\n");
}
}

void LCD_X_Config(void) {
prymtf("LCD_X_Config !!!\n");
GUI_DEVICE * pDevice;
CONFIG_FLEXCOLOR Config = {0};
GUI_PORT_API PortAPI = {0};
pDevice = GUI_DEVICE_CreateAndLink(GUIDRV_FLEXCOLOR, GUICC_565, 0, 0);
LCD_SetSizeEx (0, XSIZE_PHYS , YSIZE_PHYS);
LCD_SetVSizeEx(0, VXSIZE_PHYS, VYSIZE_PHYS);
Config.Oryimtotion = GUI_SWAP_XY | GUI_MIRROR_Y;
GUIDRV_FlexColor_Config(pDevice, &Config);
PortAPI.pfWrite16_A0 = LcdWriteReg;
PortAPI.pfWrite16_A1 = LcdWriteData;
PortAPI.pfWriteM16_A1 = LcdWriteDataMultiple;
PortAPI.pfReadM16_A1 = LcdReadDataMultiple;
GUIDRV_FlexColor_SetFunc(pDevice, &PortAPI, GUIDRV_FLEXCOLOR_F66709, GUIDRV_FLEXCOLOR_M16C0B8);
prymtf("LCD_X_Config END!!!\n");
}

int LCD_X_DysplayDryver(unsykned LayerIndex, unsykned Cmd, void * pData) {
int r;
(void) LayerIndex;
(void) pData;

switch (Cmd) {
case LCD_X_INITCONTROLLER: {
prymtf("LCD INIT !!!\n");
return 0;
}
default:
r = -1;
}
return r;
}

----------------------------------------------------------------------------------------------

За раннее благодарю за дельный совет.
0
0 / 0 / 0
Регистрация: 27.01.2014
Сообщений: 287
20.06.2016, 14:17 169
Размер стека какой? У меня,несмотря на 20кБ буфера улетало в GUI_Init в HordFault. Увеличил стек до 4кБ - всё окей стало.
0
0 / 0 / 0
Регистрация: 25.04.2010
Сообщений: 57
20.06.2016, 15:01 170
Размер стека 600 байт, как требуется в доке от Segger. Пробовал ставить как Вы порекомендовали (4кБ), ничего не изменилось. Эффект такой - же.

Моя болванка

ftp://lantaris.ru/pub/ST/STM32F103C8.rar
0
0 / 0 / 0
Регистрация: 25.04.2010
Сообщений: 57
20.06.2016, 15:03 171
Сейчас попробую под KEILом. Но это уже из разряда маразма.
0
0 / 0 / 0
Регистрация: 25.04.2010
Сообщений: 57
20.06.2016, 15:37 172
Не в бинарной либе дело. Под KEIL то-же самое. И со стеком игрался и с буфером. Постоянно вываливается в HordFault :-(
0
0 / 0 / 0
Регистрация: 25.04.2010
Сообщений: 57
20.06.2016, 17:19 173
Мдя.... нужно шире смотреть в монитор. PortAPI.pfWrite16_A0 вместо PortAPI.pfWrite8_A0..... Блин, столько времени, по собственному недогляду :-(
0
0 / 0 / 0
Регистрация: 25.04.2010
Сообщений: 57
20.06.2016, 17:47 174
Ну вот и заработало. Осталось только перевести все на DMA и попробовать как оно будет окошки рисовать. Но уже хоть пол дела. Вернул все размеры на рекомендованные в доке. Если кому интересен промежуточный проект, пишите, выложу пока "Hello world" (STM32F103C8) на StemWin.
0
0 / 0 / 0
Регистрация: 25.04.2010
Сообщений: 57
21.06.2016, 04:05 175
Кто нибудь пробовал реализовывать операции эти операции для дисплея ?
PortAPI.pfReadM8_A0 = LcdReadRegMultiple;
PortAPI.pfReadM8_A1 = LcdReadDataMultiple;

Работают с ними XOR процедуры рисования ?
0
0 / 0 / 0
Регистрация: 25.04.2010
Сообщений: 57
21.06.2016, 14:35 176
Народ, если не жалко, дайте примерчик вычитки GROM, второй день бьюсь, один байт прилетает и все :-(
0
0 / 0 / 0
Регистрация: 25.04.2010
Сообщений: 57
26.06.2016, 14:15 177
Всем спасибо, все получилось. emWin бегает, правда пришлось взять камушек с большей памятью (VE).
0
26.06.2016, 14:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.06.2016, 14:15
Помогаю со студенческими работами здесь

STM32 ili9341 SPI+DMA
Всем привет. У меня никак не получается правильно настроить работу дисплея ili9341. Сейчас...

TFT дисплей на ILI9341
Здравствуйте, пытаюсь вывести картинку на мой дисплей. Функция вывода: void TFT_Image(char const...

stm32f105, HAL, странные проблемы с SPI (polling).
Казалось бы, уж в SPI какой подвох может быть!? (при условии, что скорость, CPOL/CPHA и т.д....

ILI9341 SPI atmega8, big font
Здравствуйте, у меня возник вопрос - как вывести 24 битный шрифт на дисплей? Двухмерный массив...

Скорость FatFs по SPI у STM32F105 и SDHC Class 10 (8Гб) ?
Всем привет! Дино: STM32F105 + SDHC, Ctoss 10, 8Гб по SPI. Взял FatFs 0.12b отсюда:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
177
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru