Перейти к содержанию
    

Добрый день, товарищи

 

Раскуриваю даташиты и разнообразные примеры, в том числе и на забугорных сайтах, уже больше недели, но скорость продвижения только замедляется.

Помогите, пожалуйста.

 

Имеется плата HY-Mini STM32V, купленная на ибее. Выбрал ее за такой комплекс периферии:

 

f74070d75b0f28e5c36ec68133710fc2.png

  • Контроллер STM32F103VCT6
  • Дисплей 320х240, 65536 цветов на контроллере SSD1289, подключенный по 16bit параллельному FSMC интерфейсу
  • Тачскрин на контроллере ADS7843 (по SPI подключен).
  • Слот microSD и прочее...

Скачал библиотеку STemGUI с офф. сайта ST Microelectronics. В процессе чтения даташита на эту библиотеку стало понятно, что это известная платная библиотека emGUI, похоже купленная ST и выложенная свободно, возможно, в какой-то ограниченной комплектации, но драйвер для распространенных контроллеров SSD1289 у ней в комплекте. И находится он там в файле LCDConf_FlexColor_Template.

 

На сайте производителя этой отладочной платы я нашел разнообразные примеры, в том числе и STemGUI, он компилируется, но не работает. Судя по всему его код не полностью портирован с одной из официальных отладочных ST'шных плат на эту, и, кроме того, библиотека, предлагаемая ST, сейчас уже откомпилирована в lib-файл, а этот пример - нет, и в итоге мало чего общего в них я заметил.

 

Прилагаю к этому посту код моего проекта в Keil4, и даташиты железа.

 

744a27a3cea45986aba559a87a859ac2.png

 

Помогите, пожалуйста, разобраться куда в этой библиотеке вписать адреса памяти для работы с LCD по FSMC, буду очень признателен, если покажете в каком месте даташита к контроллеру SSD1289 указаны конкретные адреса его памяти. И где в этой библиотеке настраиваются пины контроллера, к которым подключен LCD и Тач.

 

Сейчас мой проект при компиляции выдает следующие ошибки:

Error: L6406E: No space in execution regions with .ANY selector matching guiconf.o(.bss).

Error: L6407E: Sections of aggregate size 0x800000 bytes could not fit into .ANY selector(s).

 

Т.е. я так понимаю, первая проблема - это не настроенные адреса памяти вообще,

есть мысль, что настраиваются они вот здесь, в файле GUIConf.c:

 

#define GUI_NUMBYTES 0x200000

void GUI_X_Config(void) {
  //
  // 32 bit aligned memory area
  //
  static U32 aMemory[GUI_NUMBYTES / 4];
  //
  // Assign memory to emWin
  //
  GUI_ALLOC_AssignMemory(aMemory, GUI_NUMBYTES);
  //
  // Set default font
  //
  GUI_SetDefaultFont(GUI_FONT_6X8);
}

 

Изменение значения GUI_NUMBYTES на наличие ошибок влияния не дает.

 

Файлы моего проекта с библиотеками скачать можно здесь:

STemWinProject.rar

HY32D_LCD_module_schematic.pdf

HY_MiniSTM32V_SCH.pdf

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Внимательно изучите документацию на библиотеку, в особенности разделы Конфигурация и Драйвера.

 

GUI_NUMBYTES - это размер памяти, выделяемый для библиотеки. Вы установили 0x200000, что намного больше размера ОЗУ контроллера.

 

Нужный вам драйвер называется GUIDRV_CompactColor_16. Надо написать функции записи-чтения для контроллера дисплея в соответствии с вашим железом и интерфейсом.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1) Библиотека не совсем свободная, она в объектах поставляется ST бесплатно. Но её надо сконфигурировать. Задать число строк/столбцов/ориентацию и так далее. Так что найдите файл конфигурации.

2) Драйвер тоже может быть не совсем такой какой нужен. Там не все ноги могут совпадать. Проверьте соответствие ног. Далее почитайте инициализацию портов выбор ф-ций и тому подобное.

3) Подправьте кварц и тому подобное.

Вроде всё.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Изменение значения GUI_NUMBYTES на наличие ошибок влияния не дает.

 

Надо изменить размер экрана в LCDConf.c

Скажем вот так:

#define XSIZE_PHYS  2  //было 240 // To be adapted to x-screen size
#define YSIZE_PHYS  2  //было 320 // To be adapted to y-screen size

 

И сразу увидите другую ошибку. Которая говорит что драйверов у вас на самом деле нет. :laughing:

И похоже либа изначально сконфигурирована на прямое мапирование видеобуфера.

А на плате нет внешней шины. Т.е. сама библиотека уже не подходит.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да разработчики же этой библиотеки утверждают, что она универсальна.

 

Да универсальна, пока не скомпилирована.

Я года три назад как раз на STM32F103 ее выкладывал с поддержкой TTF шрифтов.

Но то было на внешней памяти. Без буффера экрана эта GUI превращается просто в тормоза. А на вашей плате места для такого буфера даже нет.

 

А как скомпилирована либа от ST, трудно сказать, исходники они же не дают .

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

чем отличается FSMC от "прямого мапирования видеобуфера"?

 

Вот такую библиотеку нашел STemWin, не откомпилированную, а под одну из их отладочных плат, и которая тоже работает на STM32F103 и LCD по FSMC подключен.

Это одна из тех библиотек, которые предлагаются на сайте производителя моего железа.

 

Библиотека STemWin от разработчиков платы

 

Я так понимаю, это то, что нужно?

Изменено пользователем electrotehnik

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

чем отличается FSMC от "прямого мапирования видеобуфера"?

 

Под прямым мапирование я имел в виду отображение памяти видеоконтроллера на область памяти в STM32

И на такую память настроена либа.

А на вашей плате видеоконтроллер для STM32 представлен как два регистра.

 

Я так понимаю, это то, что нужно?

 

Нет конечно, это фрагменты демок для Discovery. Там внешняя шина полная выведена.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

..Там внешняя шина полная выведена.

 

Вас не затруднит показать, как выглядит полная внешняя шина?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вас не затруднит показать, как выглядит полная внешняя шина?

 

Не затруднит, смотрите на здоровье: http://www.st.com/st-web-ui/static/active/.../DM00093903.pdf

Стр. 30

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо.

Для этой платы буду искать другую библиотеку GUI.

Например, сейчас уже с uGFX знакомлюсь.

 

Объектно-ориентированного интерфейса для проектирования экрана(-ов) у нее пока нет. Но зато есть несколько рабочих виджетов.

Сайт проекта uGFX

 

Может кто-то еще посоветует что-то? Из бесплатного.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не работал с STemGUI, думаю глобальных отличий от EmWin нет.

Есть два драйвера которые поддерживают контроллер SD1289: GUIDRV_FLEXCOLOR и GUIDRV_COMPACT_COLOR_16.

Их различие состоит в том, что драйвер GUIDRV_FLEXCOLOR - runtime configurable, то есть может конфигурироваться во время работы, а параметры драйвера GUIDRV_COMPACT_COLOR_16 задаются во время компиляции (compile time configurable).

В этих драйверах уже учтены необходимые адреса памяти и регистров их вручную настраивать не надо.

 

Error: L6406E: No space in execution regions with .ANY selector matching guiconf.o(.bss).

Error: L6407E: Sections of aggregate size 0x800000 bytes could not fit into .ANY selector(s).

 

Эти ошибки говорят, что задано слишком большой размер памяти для GUI, необходимо уменьшить, чем меньше это значение тем заметнее будут перерисовки.

Можете попробовать

#define GUI_NUMBYTES  (320*240)

 

AlexandrY верно подсказал, необходимо задать размеры экрана:

#define XSIZE_PHYS 320
#define YSIZE_PHYS 240

 

Для полноценной работы необходимо такие функции:

1. Инициализация дисплея

a) Инициализируется вся необходимая для дисплея периферия : FSMC, GPIO, PWM для подсветки)

б) Запись в регистры необходимых параметров (количество цветов, поворот, интерфейс)

Эта функцию необходимо вызвать в функции LCD_X_DisplayDriver, в случае LCD_X_INITCONTROLLER.

2. Считывание и запись слов и массивов (указатели на эти функции будут использоваться в драйвере)

void LCD_X_Write00_16(U16 c);
void LCD_X_Write01_16(U16 c);
U16  LCD_X_Read01_16 (void);
void LCD_X_WriteM01_16(U16 * pData, int NumWords);
void LCD_X_ReadM01_16 (U16 * pData, int NumWords);

 

Последний пункт оформление функции LCD_X_Config, в которой настраивается сам драйвер, вот пример моей:

GUI_DEVICE * pDevice;
CONFIG_FLEXCOLOR Config = {0};
GUI_PORT_API PortAPI = {0};
pDevice = GUI_DEVICE_CreateAndLink(GUIDRV_FLEXCOLOR,COLOR_CONVERSION, 0, 0);
Config.RegEntryMode = 0x6830;
Config.Orientation = GUI_SWAP_XY|GUI_MIRROR_X|GUI_MIRROR_Y;
GUIDRV_FlexColor_Config(pDevice, &Config);
LCD_SetSizeEx (0,XSIZE_PHYS, YSIZE_PHYS);
LCD_SetVSizeEx(0, XSIZE_PHYS * NUM_VSCREENS, YSIZE_PHYS);

LCD_SetSizeEx (0, XSIZE_PHYS, YSIZE_PHYS);
LCD_SetVSizeEx(0, XSIZE_PHYS * NUM_VSCREENS, YSIZE_PHYS);
PortAPI.pfWrite16_A0  = LCD_X_Write00_16;
PortAPI.pfWrite16_A1  = LCD_X_Write01_16;
PortAPI.pfWriteM16_A1 = LCD_X_WriteM01_16;
PortAPI.pfReadM16_A1  = LCD_X_ReadM01_16;
GUIDRV_FlexColor_SetFunc(pDevice, &PortAPI, GUIDRV_FLEXCOLOR_F66702, GUIDRV_FLEXCOLOR_M16C0B16);

где GUIDRV_FLEXCOLOR_F66702 - идентификатор SSD1289, GUIDRV_FLEXCOLOR_M16C0B16 - формат шині ( 16bpp, no cache, 16 bit bus)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо.

Для этой платы буду искать другую библиотеку GUI.

Например, сейчас уже с uGFX знакомлюсь.

 

Объектно-ориентированного интерфейса для проектирования экрана(-ов) у нее пока нет. Но зато есть несколько рабочих виджетов.

Сайт проекта uGFX

 

Может кто-то еще посоветует что-то? Из бесплатного.

 

Посмотрел. Сначала порадовал список их фичей, и названия в исходниках такие многообещающие: ttf, Windows, JPEG, PNG...

А потом опа в сорсах: #error "JPG support not implemented yet"

Также как и ttf, антиалиасинг, окна и т.д.

 

Окнами они называют некую примитивную структуру которая для такого "нереального" удобства сохраняет в себе только цвет фона и координаты.

Ни оконной процедуры, ни сообщений, ни частичной прорисовки и перекрытий, ни оконных меню .. ничего этого нет.

 

Знаете, я бы помучился, но достал бы рабочий uC/GUI и забыл бы все эти опенсорсы как страшный сон.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

...GUIDRV_FLEXCOLOR_M16C0B16 [/b]- формат шині ( 16bpp, no cache, 16 bit bus)

 

Это ведь актуально для подключения LCD к MCU по примеру демоплаты от ST (32F429IDISCOVERY)?

А для подключения, имеющегося сейчас у меня на руках, в текущей компиляции библиотеки STemWin режима работы шины данных нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Знаете, я бы помучился, но достал бы рабочий uC/GUI и забыл бы все эти опенсорсы как страшный сон.

Ну собственно есть другой вариант нарушений ... ))

Я пробовал библиотеку бесплатную от MICROCHIP. Она в исходниках ... Тоже вполне рабочая... ))

Только для PICов позиционируется ...

У меня перенос был безболезненный.

Правда с того момента года 2 ушло. Смотрю они развили её достаточно серьёзно.

А то uC/GUI уж больно навёрнутой показалась.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...