реклама на сайте
подробности

 
 
> Пример от ST для STemWin где-то виснет.
zheka
сообщение Dec 3 2016, 21:04
Сообщение #1


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Господа, скачал я с сайта ST библиотеку STemWIN.
В архиве есть примеры под разные платы. STM32F4Discovery, которой я пользуюсь, там нет. Выбрал то что ближе всего - STM324XG_EBAL.
Подключил дисплей по FSMC. Ожидал трудностей с адаптацией, ибо контроллеры разные, с разным количеством ног. Опасения не оправдались - заменил пины NE3 на NE1, А0 на A16 и адреса LCD_REG и LCD_DAT подправил - дисплей работает.
Отключил инициализацию светодиодов и SRAM (в дискавери нет внешней SRAM).

Написал маленькую демку из стандартных функций - дисплей, повторюсь, работает, то есть проблем, обусловленных различием в платах, предвидеться не должно, ибо весь дальнейший код
Код
GUI_Init();
  
  GUI_Initialized = 1;

  /* Start Demo */
  GUIDEMO_Main();
}


от железа отвязан.
Тем не менее, где-то в GUI_Init() программа зависает. В функцию залезть не могу и в тексте ее не нашел, я так догадываюсь, что она непосредственно в библиотеке STemWin, в которую доступа нет.
Может ли эта проблема быть связана с тем, что примечик не знает, что у меня нет SRAM? Где это настроить? Возможно ли использовать STemWin без SRAM?
У кого-нибудь получалось на Дискавери запускать STEmWin?

Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
zheka
сообщение Dec 4 2016, 05:49
Сообщение #2


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Цитата
А какой у Вас размер буфера STemWin?

А где его посмотреть?
Я менял #define GUI_NUMBYTES (1024) * 512 на #define GUI_NUMBYTES (320) * 240*2 , если вы об этом.

Цитата
Драйверу FlexColor нужно задавать указатели на функции доступа к FSMC. Вы их задали?

Уважаемый. Вот если бы я писал что-то с нуля, такое предположение было бы кстати.
Но я использую готовое. Значит разработчик задал.
Эти указатели нужно менять в связи с тем, что я перенастроил FSMC под другой банк памяти?
Go to the top of the page
 
+Quote Post
hd44780
сообщение Dec 4 2016, 07:43
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



Цитата(zheka @ Dec 4 2016, 08:49) *
Я менял #define GUI_NUMBYTES (1024) * 512 на #define GUI_NUMBYTES (320) * 240*2 , если вы об этом.

Да, я об этом. Осмелюсь предположить, что вы используете дисплей 320x240 sm.gif . Но размер буфера никак не связан с размером дисплея.
320*240*2 = 150 кил -- ну нет в F407 такого объёма памяти одним куском.
На Ф407 (дискавери) я использовал
#define GUI_NUMBYTES 64 *1024
64кила должно хватить для большинства задач.
Стек брал
Код
#define STACK_SIZE       0x00000300      /*!< The Stack size suggest using even number    */
__attribute__ ((section(".co_stack")))
unsigned long pulStack[STACK_SIZE];


Цитата(zheka @ Dec 4 2016, 08:49) *
Уважаемый. Вот если бы я писал что-то с нуля, такое предположение было бы кстати.
Но я использую готовое. Значит разработчик задал.
Эти указатели нужно менять в связи с тем, что я перенастроил FSMC под другой банк памяти?


От адреса не зависит, т.к. ему пофиг на какие-то адреса. Там просто функции типа записать команду/данные и пр. А по каким адресам и как Вы это делаете - Ваше личное дело. Хоть через уарт rolleyes.gif
Вот как я делал:
CODE
void LCD_X_Config ( void )
{
GUI_DEVICE *pDevice;
CONFIG_FLEXCOLOR Config = {0};
GUI_PORT_API PortAPI = {0};

// Set display driver and color conversion
pDevice = GUI_DEVICE_CreateAndLink ( GUIDRV_FLEXCOLOR, GUICC_M565, 0, 0 );

// Display driver configuration, required for Lin-driver
LCD_SetSizeEx ( 0, XSIZE_PHYS , YSIZE_PHYS );
LCD_SetVSizeEx ( 0, VXSIZE_PHYS, VYSIZE_PHYS );

// Orientation
Config.Orientation = 0; // (GUI_MIRROR_X | GUI_MIRROR_Y);
Config.FirstCOM = 0x01;
Config.FirstSEG = 0x02;
GUIDRV_FlexColor_Config ( pDevice, &Config );

/*
+ void (* pfWrite16_A0) (U16 Data); // Запись в регистр команд
+ void (* pfWrite16_A1) (U16 Data); // Запись в регистр данных
+ void (* pfWriteM16_A1)(U16 * pData, int NumItems); // Запись блока в регистр данных
+ void (* pfReadM16_A1) (U16 * pData, int NumItems); // Чтение блока из регистр данных
+ U16 (* pfRead16_A1) (void); // Чтение регистра данных

void (* pfWriteM16_A0)(U16 * pData, int NumItems);
U16 (* pfRead16_A0) (void);
void (* pfReadM16_A0) (U16 * pData, int NumItems);
*/
// Set controller and 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
GUIDRV_FlexColor_SetFunc ( pDevice, &PortAPI, GUIDRV_FLEXCOLOR_F66720, GUIDRV_FLEXCOLOR_M16C0B16 );

GUIDRV_FlexColor_SetReadFunc66720_B16 ( pDevice, GUIDRV_FLEXCOLOR_IF_TYPE_II );
} // LCD_X_Config

.....................
////////////////////////////////////////////////////
// Функции для драйвера FlexColor

// Запись команды в SSD1963
void SSD1963_WriteCmd ( uint16_t cmd )
{
FSMC_LcdWriteCmd ( cmd );
} // SSD1963_WriteCmd

// Запись данных в SSD1963
void SSD1963_WriteData ( uint16_t data )
{
FSMC_LcdWriteData ( data );
} // SSD1963_WriteCmd

// Чтение данных из SSD1963
uint16_t SSD1963_ReadData ( void )
{
return FSMC_LcdReadData ( );
} // SSD1963_ReadData

// Запись блока в SSD1963
void SSD1963_WriteBlock ( uint16_t *pData, int NumItems )
{
// FSMC_TransferDataDMAToLCD ( pData, NumItems * 2, true );
for ( ; NumItems; NumItems -- )
FSMC_LcdWriteData ( *pData++ );
} // SSD1963_WriteCmd

// Чтение блока из SSD1963
void SSD1963_ReadBlock ( uint16_t *pData, int NumItems )
{
// FSMC_TransferDataDMAFromLCD ( pData, NumItems * 2 );
for ( ; NumItems; NumItems -- )
*pData++ = FSMC_LcdReadData ( );
} // SSD1963_ReadBlock

////////////////////////////////////////////////////


Ну и ещё ложка дёгтя про FlexColor. В нём есть какой-то древнющий баг - не работает чтение пикселей с дисплея.
Проявляется это в виде чёрного следа, тянущегося за любым спрайтом (курсор мыши тоже спрайт).
Я знаю 2 лекарства этой беды:
1. Не использовать Flexcolor. Использовать свои функции для работы с дисплеем.
2. Использовать большой буфер STemWin (GUI_NUMBYTES). Сколько именно надо - не знаю, на F439+SDRAM я использовал 3 метра. В этом случае, видимо, включается некое кэширование и чтение с дисплея не используется (проверял лично). В функции Read вообще никогда не попадает. Но этот вариант на дискаверине не реализуем вообще sad.gif .

На дискавери я использовал вариант 1. Проблем не было.


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- zheka   Пример от ST для STemWin где-то виснет.   Dec 3 2016, 21:04
- - AlexandrY   Цитата(zheka @ Dec 3 2016, 23:04) Может л...   Dec 3 2016, 22:50
- - zheka   ЦитатаДля этого GUI требуется глубокий стек. Руко...   Dec 4 2016, 05:21
- - hd44780   А какой у Вас размер буфера STemWin? Драйверу Flex...   Dec 4 2016, 05:44
- - zheka   Куда это вставлять? ТАм же где GUI_NUMBYTES ? Кодd...   Dec 4 2016, 08:24
|- - hd44780   Цитата(zheka @ Dec 4 2016, 11:24) Куда эт...   Dec 4 2016, 08:31
|- - zheka   Цитата(hd44780 @ Dec 4 2016, 11:31) Нет, ...   Dec 4 2016, 08:36
|- - hd44780   Цитата(zheka @ Dec 4 2016, 11:36) А где е...   Dec 4 2016, 08:41
- - hd44780   стек 0x2000 - вполне достаточно. Прочитайте мой пр...   Dec 4 2016, 08:37
- - zheka   Цитатаесли хотите - выложу полный пример STemWinDe...   Dec 4 2016, 08:39
- - zheka   Цитата..\SSD1963_Driver\SSD1963.c(9): er...   Dec 4 2016, 08:56
- - hd44780   Сорри. Там просто функция задержки на указанное ко...   Dec 4 2016, 08:58
- - zheka   Еще вопрос. У меня был файл GUIConf_stm3240g_eval,...   Dec 4 2016, 09:02
|- - hd44780   Цитата(zheka @ Dec 4 2016, 12:02) Еще воп...   Dec 4 2016, 10:23
- - zheka   Ну у меня пока ситуация с ошибками компиляции как ...   Dec 4 2016, 10:43
- - hd44780   а покажите ошибки, может подскажу чего ...   Dec 4 2016, 14:34
- - zheka   Я пока к старому варианту вернул, хочу попробовать...   Dec 5 2016, 13:08
- - zheka   Заработало с Вашими файликами, когда SSD1963 подкл...   Dec 12 2016, 20:24
|- - hd44780   Цитата(zheka @ Dec 12 2016, 23:24) Зарабо...   Dec 14 2016, 05:29
- - zheka   Просто обалдеть.... Чего нашел... Как выводится в ...   Dec 13 2016, 06:26
- - Obam   А чему тут удивляться? В цветных ЖКИ видеопамять а...   Dec 13 2016, 07:30
- - zheka   ЦитатаВ цветных ЖКИ видеопамять адресуется попиксе...   Dec 13 2016, 07:38
- - Obam   Вот чесслово, за всё время перетираний, если не тр...   Dec 13 2016, 08:03
- - zheka   ЦитатаЗапись точки в SSD1963 - это 6 команд (запис...   Dec 14 2016, 05:57
- - Rash   Так никто не мешает переписать часть ф-ций в драйв...   Dec 14 2016, 06:41
- - hd44780   Попробуйте переписать функции в LCDConf.c. Я этого...   Dec 14 2016, 09:08
- - zheka   А как бы мне проследить иерархию от от функций GUI...   Dec 15 2016, 06:56
|- - hd44780   Цитата(zheka @ Dec 15 2016, 09:56) Здесь?...   Dec 15 2016, 16:54
- - Mister_DSP   Ой-ой-ой! Непорядок!.... Сколько работал с...   Dec 15 2016, 08:24


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 30th July 2025 - 04:35
Рейтинг@Mail.ru


Страница сгенерированна за 0.01396 секунд с 7
ELECTRONIX ©2004-2016