Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: HY-Mini STM32V + STemGUI
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
electrotehnik
Добрый день, товарищи

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

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


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

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

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

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



Помогите, пожалуйста, разобраться куда в этой библиотеке вписать адреса памяти для работы с 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
Jekin
Внимательно изучите документацию на библиотеку, в особенности разделы Конфигурация и Драйвера.

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

Нужный вам драйвер называется GUIDRV_CompactColor_16. Надо написать функции записи-чтения для контроллера дисплея в соответствии с вашим железом и интерфейсом.
SasaVitebsk
1) Библиотека не совсем свободная, она в объектах поставляется ST бесплатно. Но её надо сконфигурировать. Задать число строк/столбцов/ориентацию и так далее. Так что найдите файл конфигурации.
2) Драйвер тоже может быть не совсем такой какой нужен. Там не все ноги могут совпадать. Проверьте соответствие ног. Далее почитайте инициализацию портов выбор ф-ций и тому подобное.
3) Подправьте кварц и тому подобное.
Вроде всё.
AlexandrY
Цитата(electrotehnik @ Oct 10 2014, 09:23) *
Изменение значения 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.gif
И похоже либа изначально сконфигурирована на прямое мапирование видеобуфера.
А на плате нет внешней шины. Т.е. сама библиотека уже не подходит.
electrotehnik
Да разработчики же этой библиотеки утверждают, что она универсальна.
AlexandrY
Цитата(electrotehnik @ Oct 10 2014, 11:23) *
Да разработчики же этой библиотеки утверждают, что она универсальна.


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

А как скомпилирована либа от ST, трудно сказать, исходники они же не дают .
electrotehnik
чем отличается FSMC от "прямого мапирования видеобуфера"?

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

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

Я так понимаю, это то, что нужно?
AlexandrY
Цитата(electrotehnik @ Oct 10 2014, 11:42) *
чем отличается FSMC от "прямого мапирования видеобуфера"?


Под прямым мапирование я имел в виду отображение памяти видеоконтроллера на область памяти в STM32
И на такую память настроена либа.
А на вашей плате видеоконтроллер для STM32 представлен как два регистра.

Цитата(electrotehnik @ Oct 10 2014, 11:51) *
Я так понимаю, это то, что нужно?


Нет конечно, это фрагменты демок для Discovery. Там внешняя шина полная выведена.
electrotehnik
Цитата(AlexandrY @ Oct 10 2014, 08:56) *
..Там внешняя шина полная выведена.


Вас не затруднит показать, как выглядит полная внешняя шина?
AlexandrY
Цитата(electrotehnik @ Oct 10 2014, 11:58) *
Вас не затруднит показать, как выглядит полная внешняя шина?


Не затруднит, смотрите на здоровье: http://www.st.com/st-web-ui/static/active/.../DM00093903.pdf
Стр. 30
electrotehnik
Спасибо.
Для этой платы буду искать другую библиотеку GUI.
Например, сейчас уже с uGFX знакомлюсь.

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

Может кто-то еще посоветует что-то? Из бесплатного.
valeros
Не работал с 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)
AlexandrY
Цитата(electrotehnik @ Oct 10 2014, 12:13) *
Спасибо.
Для этой платы буду искать другую библиотеку GUI.
Например, сейчас уже с uGFX знакомлюсь.

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

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


Посмотрел. Сначала порадовал список их фичей, и названия в исходниках такие многообещающие: ttf, Windows, JPEG, PNG...
А потом опа в сорсах: #error "JPG support not implemented yet"
Также как и ttf, антиалиасинг, окна и т.д.

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

Знаете, я бы помучился, но достал бы рабочий uC/GUI и забыл бы все эти опенсорсы как страшный сон.
electrotehnik
Цитата(valeros @ Oct 10 2014, 10:59) *
...GUIDRV_FLEXCOLOR_M16C0B16 [/b]- формат шині ( 16bpp, no cache, 16 bit bus)


Это ведь актуально для подключения LCD к MCU по примеру демоплаты от ST (32F429IDISCOVERY)?
А для подключения, имеющегося сейчас у меня на руках, в текущей компиляции библиотеки STemWin режима работы шины данных нет.
SasaVitebsk
Цитата(AlexandrY @ Oct 10 2014, 14:30) *
Знаете, я бы помучился, но достал бы рабочий uC/GUI и забыл бы все эти опенсорсы как страшный сон.

Ну собственно есть другой вариант нарушений ... ))
Я пробовал библиотеку бесплатную от MICROCHIP. Она в исходниках ... Тоже вполне рабочая... ))
Только для PICов позиционируется ...
У меня перенос был безболезненный.
Правда с того момента года 2 ушло. Смотрю они развили её достаточно серьёзно.
А то uC/GUI уж больно навёрнутой показалась.
valeros
Цитата(electrotehnik @ Oct 10 2014, 15:01) *
Это ведь актуально для подключения LCD к MCU по примеру демоплаты от ST (32F429IDISCOVERY)?
А для подключения, имеющегося сейчас у меня на руках, в текущей компиляции библиотеки STemWin режима работы шины данных нет.


Должно быть актуально и для F429DISCOVERY, если я не ошибаюсь в F429DISCOVERY дисплей работает в связке с SDRAM которая тоже висит на FSMC.
electrotehnik
Цитата(SasaVitebsk @ Oct 10 2014, 13:13) *
Я пробовал библиотеку бесплатную от MICROCHIP. Она в исходниках ... Тоже вполне рабочая... ))


А есть какой-нибудь простенький пример проекта с этой библиотекой на STM32?
johnic
Цитата(electrotehnik @ Oct 10 2014, 07:23) *
Скачал библиотеку STemGUI с офф. сайта ST Microelectronics. В процессе чтения даташита на эту библиотеку стало понятно, что это известная платная библиотека emGUI, похоже купленная ST и выложенная свободно, возможно, в какой-то ограниченной комплектации, но драйвер для распространенных контроллеров SSD1289 у ней в комплекте. И находится он там в файле LCDConf_FlexColor_Template.



А чем Вас не устраивают библиотеки идущие с этой платой? Там есть и рабочие примеры для работы с дисплеем и тачскрином.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.