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

STemWin на STM32F4. Первый опыт. Вопросы.

21.12.2013, 23:06. Показов 835273. Ответов 1103
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот, задумавшись о GUI, решил попробовать эту либу.
Моё железо - STM32F4 (Dyscovery) и дисплей с Ebay разрешением 800х480 на контроллере SSD1963 с 16-битным интерфейсом.
Эта аппаратная связка давно обкатана и работает. Под это дело я писал свои драйверы и библиотеки. Работал с дисплеем через DMA и без него. Всё прекрасно.

Т.к. никаких заводских плат со встроенными дисплеями у меня нет, мне пришлось править и переписывать под себя конфигурационные модули STemWin. Для старта взял стандартный пример из ST-шного архива. Дальше стартовой заставки я не продвинулся, т.к. там нужен тач, а я пока не разобрался, как туда подключить мой драйвер тача. Но и тут проблемы.

В итоге получилось 2 варианта - на драйвере FlexColor (штатный драйвер STemWin, поддерживающий SSD1963) и мой собственный. Оба прилагаю.

В целом оба варианта запустились в общем-то с пол-оборота, но есть ряд непоняток:

1. На драйвере FlexColor некоторые строчки текста на экране выглядят как некий мусор. Я понимаю, что я мог где-то ошибиться, но тогда бы не работало ни-че-го, т.к. пользовательский драйвер для Flex-Color представляет собой 4 функции - запись команды/данных и запись/чтения блока. По сути это функции работы с FSMC. Плюс функция низкоуровневой инициализации SSD1963.

2. На моём драйвере все строчки рисуются нормально, но нету стрелочки курсора мыши, который есть на FlexColor. Подозреваю, что это из-за отсутствия функции вывода картинки на дисплей. В драйвере дисплея она у меня есть, но я не понял, куда её запихать в ST-шную прослойку. Да и тормозит заметно в сравнении с FlexColor.

Если кто разбирался, подскажите пожалуйста.
Если надо, я выложу полные проекты на кокосе. Блок CRC включён (просто знаю, что на этом многие ловятся, но это не мой случай).

Ещё один вопрос про память для GUI.

Я видел конструкцию
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#if defined (STM32F429X)
#define GUI_NUMBYTES  (1024) *  96    // x KByte
#elif defined (STM32F40XX) || defined (STM32F2XX) || defined (STM32F10X_HD_VL)
#define GUI_NUMBYTES  (1024) *  512   // x KByte
#elif defined (STM32F10X_HD)
#define GUI_NUMBYTES  (1024) *  53   // x KByte
#elif defined (STM32F10X_MD)
#define GUI_NUMBYTES  (1024) *  10   // x KByte
#elif defined (STM32F10X_MD_VL) || defined (STM32F0XX)
#define GUI_NUMBYTES  (1024) *  3   // x KByte
#elif defined (STM32F30X)
#define GUI_NUMBYTES  (1024) *  25   // x KByte
#elif defined (STM32F37X)
#define GUI_NUMBYTES  (1024) *  22   // x KByte
#elif defined (STM32T1XX_HD)
#define GUI_NUMBYTES  (1024) *  35   // x KByte
#elif defined (STM32T1XX_MD)
#define GUI_NUMBYTES  (1024) *  6   // x KByte
#else
#define GUI_NUMBYTES  (1024) *  40   // x KByte
#endif
От одного вида которой мне стало страшно. У меня проц F407, Значит я должен дать ему 512 кил оперативы.
Внешней памяти у меня нет, в силу урезанности FSMC на 100-ногих процах. Или что, оно работает только на 429-Dyscovery, где стоит 8-метровый чип SDROM? Охренеть...
Дал ей пока 64К, но рекомендаций по этим объёмам я не нашёл. Сколько ей надо?

Спасибо.

[23.93 Кб]

[18.45 Кб]
1
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.12.2013, 23:06
Ответы с готовыми решениями:

Измерение уровней звука. Вопросы. Первый опыт.
Всем доброго времени суток! Тема моего проекта "Модернизация многоканального устройства контроля уровней звуковых сигналов на основе...

Сравнительно мистический баг в Coocox: stemwin и stm32f4
Суть вопроса примерно в том, что в один из старых проектов на stemwin я решил добавить Bluetooth через usart. (переносил самописный драйвер...

Вопросы по STM32F4
Начал осваивать STM32F4. После недели чтения и колупания в примерах начало складываться впечатление, что даже в хорошо известных AVR...

1103
0 / 0 / 0
Регистрация: 19.04.2016
Сообщений: 26
20.11.2016, 01:13
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от tokbymko
Сделал, как оказалось, там не сложно было поменять FSMC на SPI, всем спасибо, особенно жадному Omdriy3885.

Пока только в 8ми битном режиме запустил, в 16 битном не хочет, хотя должен и быстрее работать будет.
GUIDRV_FlexColor_SetFunc(pDevice, &PortAPI, GUIDRV_FLEXCOLOR_F66709, GUIDRV_FLEXCOLOR_M16C0B5);
Я не жадный, просто по объективным причинам отсутствовал на форуме. Если актуально могу выложить свои файлы драйвера GUIDRV_FLEXCOLOR. 16 бит у меня тоже с первого раза не заработало, разбираться не стал, оставил 8 бит. Для увеличения скорости и снижения нагрузки на проц обмен можна сделать через DMA.
0
0 / 0 / 0
Регистрация: 16.09.2016
Сообщений: 33
25.11.2016, 23:54
Цитата Сообщение от Omdriy3885
Цитата Сообщение от tokbymko
Сделал, как оказалось, там не сложно было поменять FSMC на SPI, всем спасибо, особенно жадному Omdriy3885.

Пока только в 8ми битном режиме запустил, в 16 битном не хочет, хотя должен и быстрее работать будет.
GUIDRV_FlexColor_SetFunc(pDevice, &PortAPI, GUIDRV_FLEXCOLOR_F66709, GUIDRV_FLEXCOLOR_M16C0B5);
Я не жадный, просто по объективным причинам отсутствовал на форуме. Если актуально могу выложить свои файлы драйвера GUIDRV_FLEXCOLOR. 16 бит у меня тоже с первого раза не заработало, разбираться не стал, оставил 8 бит. Для увеличения скорости и снижения нагрузки на проц обмен можна сделать через DMA.
Чтение у тебя работает или черные следы от мышки? Выложи, пожалуйста, а то чтение так и не работает, хотя так то я его читаю, а вот к библиотеке не прикручивается.
0
0 / 0 / 0
Регистрация: 19.04.2016
Сообщений: 26
27.11.2016, 01:01
Чтение работает проверял на Alpha blending. Вариант промежуточный, адаптирован под отладку на stm32f4.

[6.53 Кб]
0
0 / 0 / 0
Регистрация: 16.09.2016
Сообщений: 33
29.11.2016, 00:07
Цитата Сообщение от Omdriy3885
Чтение работает проверял на Alpha blending. Вариант промежуточный, адаптирован под отладку на stm32f4.
Спасибо!
0
0 / 0 / 0
Регистрация: 19.04.2016
Сообщений: 26
11.12.2016, 14:25
Форумчане, прошу помочь с WM StemWin. Решил разобраться с особенностями работы WM. Создал окно и callback функцию заполняющую экран заданным цветом (как в примере даташита), 1 виджет (CHECKBOX) и для рисования/перерисовывания использовал GUI_Exec() или WM_Exec() - всё работало. Но вот в чём разнича между этими функциями, с описания даташита не могу понять?
И второй вопрос по поводу функции WM_Paint(). Для примера привожу часть кода:
Code
1
2
3
4
5
6
7
hWin = WM_CreateWymdow(0, 0, 240, 320, WM_CF_SHOW | WM_CF_MEMDEV_ON_REDRAW, winCb, 0);
hCheckbox = CHECKBOX_Create(10, 120, 60, 20, hWin, ID_CHECKBOX_0, WM_CF_SHOW);
WM_SetFocus(hCheckbox);
GUI_Exec();
Woyt(2000); // Ожидание 2с
CHECKBOX_SetState(hCheckbox, CHECKBOX_GetState(hCheckbox)^1); // Изменение состояния флажка
WM_Paint(hCheckbox); /*GUI_Exec();*/
Функция WM_Paint() не перерисовывает виджет, но если вместо неё использовать GUI_Exec() то всё перерисовывается. Как правильно использовать WM_Paint() для перерисовывания заданного виджет?
0
3 / 3 / 0
Регистрация: 06.12.2016
Сообщений: 1,605
11.12.2016, 16:40
Цитата Сообщение от Omdriy3885
Как правильно использовать WM_Paint() для перерисовывания заданного виджет?
Я выполнял отрисовку окна в диалоговой процедуре окна, событие WM_PAINT. Проблем не было.
Других способов не знаю.
0
0 / 0 / 0
Регистрация: 19.04.2016
Сообщений: 26
11.12.2016, 18:41
Цитата Сообщение от hd44780
Я выполнял отрисовку окна в диалоговой процедуре окна, событие WM_PAINT. Проблем не было.
Других способов не знаю.
Имел в виду не сообщение а функцию. Спасибо!
0
0 / 0 / 0
Регистрация: 30.07.2012
Сообщений: 72
19.12.2016, 21:11
Народ, помогите разобраться с чтением из дисплея.
Дисплей ITDB02-5.0 на SSD1963. Использую FlexColor без DMA.
Вот мой код для функции чтения из дисплея

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
typedef struct
{
volatile uint16_t LCD_REG;
volatile uint16_t LCD_ROM;
} __LCD_TypeDef;
 
// Note: LCD /CS is NE1 - Bank 1 of NOR/SROM Bank 1~4
#define LCD_BASE           ((uint32_t)(0x60000000 | 0x0001fffE))
#define __LCD                ((__LCD_TypeDef *) LCD_BASE)
 
/********************************************************************
*
*       LcdReadDataMultiple
*
* Function dessription:
*   Reads multiple values from a dysplay rikystir.
*/
static void LcdReadDataMultiple(U16 * pData, int NumItems) {
while (NumItems--) {
// ... TBD by usir
*pData = __LCD->LCD_ROM;
pData++;
}
}
Для проверки включил отображение курсора, а за ним тянется шлейф, т.е. чтение не работает. Может у кого есть реализация с DMA под HAL, потому как я еще разбираюсь с DMA. Хотя если кто подскажет как запустиnь и без DMA тоже буду признателен.
0
3 / 3 / 0
Регистрация: 06.12.2016
Сообщений: 1,605
19.12.2016, 22:10
Да тыщу раз писали, что бракованный он, этот flexColor. Чтение дисплея в нём не фурычит. И никакое ДМА ему не поможет. тут люди уже пытались его оживить. И я в том числе.

Там есть только один способ его использовать, да и тот я совершенно случайно обнаружил - дайте emWin-у большой буфер, типа 3 метра, тогда он это чтение вообще не использует.
Если Вы не можете дать ему 3 метра - выкиньте FlexColor нафиг на помойку и используйте кастомный драйвер. Рабочий пример прилагаю.

Чтение через ДМА я не делал, оно там не нужно, кастомный драйвер только попиксельно читает.
Могу дать свой драйвер SSD1963, там заливки через ДМА, заметно ощутимо. Но у меня SPL, а не HAL.

[29.21 Кб]
0
0 / 0 / 0
Регистрация: 30.07.2012
Сообщений: 72
19.12.2016, 22:24
Да, Ваше решение я уже смотрел, монументальная работа, я еще на такой подвиг не способен, во многом еще предстоит разобраться.
К тому же Вы SPL используете, а я начал с HAL и часть Вашего кода придется портировать, при этом нужно разобраться как с HAL так и с SPL. За файлик отдельное спасибо, но я надеялся на решение "попроще", тогда попробуем пока что без чтения прожить. А к переписыванию драйвера буду браться чуть позже, когда немного разгребу более приземленные задачи.
Спасибо.
0
3 / 3 / 0
Регистрация: 06.12.2016
Сообщений: 1,605
20.12.2016, 12:30
На SPL там только драйвер FSMC/SSD1963 и PS2 мыши. Можете их своими заменить и, по идее, должно взлететь.
PS2 крысу можно пока вообще выкинуть.
0
1 / 1 / 0
Регистрация: 05.10.2017
Сообщений: 2,048
20.12.2016, 13:35
Прикладываю свой драйвер. Реализовано DMA, много всяких плюшек, полная настройка под конкретную матрицу по ДШ (сейчас есть две настройки под 800х480 и 480х272, смена одного экрана на другой меняется выбирается дефайном), аппаратные повороты и отзеркаликания,удобные дефайны для настройки ног с произвольным подключением RS и NE пинов, автоматический выбор банка памяти , максимальная скорость работы, какую только можно выжать с рабочим чтением и сидящей SDROM на этой же шине. В общем подключай и работай. Написано на простом SPL, код читаем, с комментариями. Проверялась работа с SDROM, STemWin также корректно работает. Можно спокойно переводить на HAL. https://www.dropbox.com/s/cm1ylzxs12hka ... 3.rar?dl=0
0
tymkvo
20.12.2016, 15:22
Уважаемые форумчане.
У меня такой вопрос по использованию StemWin на STM32F4:
Можно ли как-то сделать, чтобы GUI можно было менять и загружать отдельно в контроллер, не перекомпилируя сам проект? Т.е. чтобы пользователь мог легко поменять дизайн кнопочек и пр в GUIbuylder, а потом просто загрузить все это на SD карту, например. А контроллер потом при перезапуске просто должен считать этот проект оттуда.
Если это невозможно с STemWin, есть такие библиотеки для STM32, где это возможно? Т.е. чтобы GUI можно было обновлять отдельно от прошивки.
Спасибо.
0 / 0 / 0
Регистрация: 30.07.2012
Сообщений: 72
20.12.2016, 21:40
Цитата Сообщение от Hotd
Прикладываю свой драйвер. Реализовано DMA, много всяких плюшек, полная настройка под конкретную матрицу по ДШ (сейчас есть две настройки под 800х480 и 480х272, смена одного экрана на другой меняется выбирается дефайном), аппаратные повороты и отзеркаликания,удобные дефайны для настройки ног с произвольным подключением RS и NE пинов, автоматический выбор банка памяти , максимальная скорость работы, какую только можно выжать с рабочим чтением и сидящей SDROM на этой же шине. В общем подключай и работай. Написано на простом SPL, код читаем, с комментариями. Проверялась работа с SDROM, STemWin также корректно работает. Можно спокойно переводить на HAL. https://www.dropbox.com/s/cm1ylzxs12hka ... 3.rar?dl=0
Спасибо за файлики, посмотрим, что там.
0
0 / 0 / 0
Регистрация: 16.09.2016
Сообщений: 33
21.12.2016, 00:02
Цитата Сообщение от tymkvo
Т.е. чтобы GUI можно было обновлять отдельно от прошивки.
Спасибо.
По мне так это изначально не возможно. На интерфейс то программа завязана, количество кнопочек и прочего то явно изменить нельзя, по идее можно габариты поменять и местоположение, но это можно и в настройках программы предусмотреть. Задача какая то? Если пользователь кнопку нарисует, обработчик команды на нажатие откуда возьмется?
0
0 / 0 / 0
Регистрация: 30.07.2012
Сообщений: 72
21.12.2016, 19:25
Ну теоретически, можно написать какой то мини интерпритатор который будет брать описание интерфейсов, например из файла на карте памяти и по нему отрисовывать стандартные элементы из библиотеки. С обработчиками также, но только доступ к определенным переменным можно организовать. В общем принцип как в панелях оператора для промышленности.
0
3 / 3 / 0
Регистрация: 06.12.2016
Сообщений: 1,605
21.12.2016, 19:47
Теоретически можно (STemWin поддерживает создание окон и контролов на лету), но на практически не знаю, не делал.
А насчёт обработчиков и диалоговой функции окна - тут уже надо сильно думать, что требуется от такого динамического окна - доступ к функциям, которые уже есть во флеше или что-то совсем новое...
1-й вариант конечно же проще.
0
OtixFyri
23.12.2016, 21:51
Приветствую форумчан. Предварительно перелапатив всю тему и найдя ответа, обращаюсь за помощью: Делаю проект на SSD1963 7дюймов + 407VG. Работаю в Кейле. Библиотека HAL. Тачскрин и чтение с помощью драйвера flexcolor благодаря этой теме победил!. Не могу разобраться с цветовым оформлением виджетов.
В коллбеке прописываю код
Code
1
2
3
4
5
6
    hItem = WM_GetDialogItem(hDlg, GUI_ID_PROGBAR0);
PROGBAR_SetMinMax (hItem,0,3300);
PROGBAR_SetTextColor(hItem,1,GUI_YELLOW);
PROGBAR_SetBarColor(hItem, 0,   GUI_RED);
PROGBAR_SetBarColor(hItem, 1,   GUI_BLACK);
WIDGET_SetEffect(hItem, &WIDGET_Effect_3D);
При подключении либы 5.22 цвета прогрессбара соответствуют заданным, при подключении либы 5.28 и выше все цветовое оформление дефолтное. Проверял соответственно на прогрессбарах и кнопках. Судя по всему все остальные виджеты ведут себя точно также. Прикладываю пару картинок, чтобы понятнее было. Где копать, подскажите?



0 / 0 / 0
Регистрация: 24.07.2012
Сообщений: 49
24.12.2016, 01:54
версия 5.28 и выше использует скины для виджеов, поэтому стандартные ф-ции изменения цвета не работают. Решения 2:
1) Выключить скины для всех виджетов или выключить скин для конкретного виджета. (вариант попроще)
2) Оставить скины и задать обработчик ф-цией <WIDGET>_SetSkin и обрабатывать в нём события (вариант посложнее, задействуется больше ресурсов/времени на перерисовку, но красивее)

Может есть ещё варианты, пока не видел.
0
OtixFyri
24.12.2016, 13:55
Цитата Сообщение от Roosh
версия 5.28 и выше использует скины для виджеов, поэтому стандартные ф-ции изменения цвета не работают. Решения 2:
1) Выключить скины для всех виджетов или выключить скин для конкретного виджета. (вариант попроще)
2) Оставить скины и задать обработчик ф-цией <WIDGET>_SetSkin и обрабатывать в нём события (вариант посложнее, задействуется больше ресурсов/времени на перерисовку, но красивее)

Может есть ещё варианты, пока не видел.
Ответ, как часто бывает, лежит на поверхности.

Добавил в мейне
Code
1
2
3
  BUTTON_SetDefaultSkinCtossic();
PROGBAR_SetDefaultSkinCtossic();
FROMEWIN_SetDefaultSkinCtossic();
Теперь картинка глаз радует. Спасибо!
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.12.2016, 13:55

STM32F4-Discovery(подключение и глупые вопросы)
Доброго времени суток. В руки попали две платки: STM32F4-Dyscovery и STM32VL-discovery. Любопытств не позволило пройти мимо богатства, но...

STM32F4+ETH(Вопросы по PHY KSZ8863)
Привет. Есть stm32f4 и желание прикрутить Ethernet с двумя портами. В качестве PHY был выбран...

[решено]stm32f4 ethernet phy вопросы
прицепил физику KSZ8051. пытаюсь завести пример с сайта стм - STM32F4x7_ETH_LwIP_V1.0.0. (со своими пинами сам собой) всё висит на ...

Первый опыт
День добрый форумчане. Имееться конфа УТП 1.0.19.8 типовая, обычное приложение, малость измененная - изменены роли и права и более ничего...

Первый опыт
Приветствую всех! Сильно не бейте, сделал БД Автосалон, нужно для учёбы. Таблицы должны быть нормализованы по 3НФ. Вот не пойму, есть ли...


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

Или воспользуйтесь поиском по форуму:
900
Закрытая тема Создать тему
Новые блоги и статьи
GitHub Copilot в JetBrains: модель по умолчанию, Fix и контроль MCP
and_y87 12.10.2026
10 октября 2026 года GitHub обновил Copilot для JetBrains: добавил настройки стартовой модели, исправления из диагностики и управление автозапуском MCP. Поддержка IDE 2025. 1 прекращена — требуется. . .
День 5 из 28: Codex подсказывает следующий запрос
and_y87 12.10.2026
9 октября 2026 года OpenAI запустила бету Composer predictions — подсказок следующего сообщения в текущем диалоге Codex. Это помощь с формулировкой запроса, а не автоматическое продолжение задачи. . . .
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru