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

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

21.12.2013, 23:06. Показов 835874. Ответов 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
3 / 3 / 0
Регистрация: 06.12.2016
Сообщений: 1,605
06.04.2017, 09:12
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от disymir
Стандартный набор демо STemWin на основе CMSIS+Keil4 проходят на ура. Те же тесты на основе HAL+Keil4 проходят частично. Не работают виджеты FrameWymdows. Подозреваю, что проблема с настройкой тактирования. В CMSIS для увеличения OS_TimeMS используется отдельный таймер TIM3. В HAL волшебная константа OS_TimeMS увеличивается прерыванием по SYSTick. Проект настраивается CubeMX стандартно внешний кварц на 8 мгц. Тактовая частота 168 мгц. Помогите разобраться в этой проблеме.
С кубом не работаю, точно не подскажу, не знаю. Проверьте каким-либо образом, что OS_TimeMS инкрементируется раз в 1 мс. Именно так происходит в некубовом варианте.
0
rukh
06.04.2017, 13:13
Доброго времени суток.
Продолжаю разбираться с STemWin. Научился создавать и редактировать виджеты и окна в GUIBuilder. И созрел у меня такой вопрос: дисплей у меня без тача, пользую плату STM32F4-Dyscovery. Хочу подключить на порты несколько кнопок, чтобы управлять с их помощью дисплеем. Как сделать так, чтобы при нажатии на физическую кнопку, нажималась и кнопка меню дисплея? Короче говоря, как управлять виджетами? Читал руководство emWin.Функции работы с виджетами там описаны, но я никак не могу состыковать работу в файле, созданном в GUIBuilder и реализацию управления виджетами от кнопок в обработчике прерываний. Подскажите пожалуйста, куда копать.
Спасибо.
3 / 3 / 0
Регистрация: 06.12.2016
Сообщений: 1,605
06.04.2017, 16:01
Цитата Сообщение от rukh
Подскажите пожалуйста, куда копать.
Посмотрите, как сделана в моём примере работа с мышью.
Там есть примерно такая конструкция:

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
   GUI_PID_STATE TS_State;
uint16_t xMax, yMax;
 
xMax = LCD_GetXSize ( );
yMax = LCD_GetYSize ( );
TS_State.Layer = 0;
 
if ( mouse_data.is_new_data_present )
{
mouse_data.is_new_data_present = false;
 
TS_State.x = mouse_data.xpos;
TS_State.y = mouse_data.ypos;
TS_State.Pressed = 0;
// Page 395
if ( mouse_data.btn_left )
TS_State.Pressed = 1;
 
// Передача координат в GUI
if ( TS_State.x < xMax && TS_State.y < yMax )
GUI_TOUCH_StoreStateEx ( &TS_State );
} // if
Т.е. Вы функцией GUI_TOUCH_StoreStateEx загоняете в гуй координаты курсора и признак нажато/не нажато.
А координаты меняйте где хотите и как хотите. Гую глубоко пофигу откуда они у Вас берутся.
Сделайте, например, какой-то таймер, в его прерывании опрашивайте Ваши кнопки и меняйте соответствующие переменные. Или сразу пихайте их в этот GUI_TOUCH_StoreStateEx - как Вам удобно.

Это всё, что от Вас требуется. А виджеты отрабатывать - забота самого гуя. Вам это делать не нужно.
0
rukh
09.04.2017, 12:06
Спасибо. Буду пробовать.
А можете ваш пример скинуть или ссылку на пост, в котором вы его выкладывали?
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 60
10.04.2017, 11:03
Привет всем. Подскажите кто работал с ICONVIEW. ? Создал новое окно в GUIBuilder в него поместил ICONVIEW и пытаюсь загрузить картинку в него файл dta. Но почему то в генераторе не отображается картинка хотя на выходе в файле WymdowDLG.с есть массив с картинкой. Это так и должно быть? Может кто скинуть файл созданный в GUIBuilder с иконками. Примеров не нашел к сожалению.

0
3 / 3 / 0
Регистрация: 06.12.2016
Сообщений: 1,605
10.04.2017, 12:06
Цитата Сообщение от rukh
Спасибо. Буду пробовать.
А можете ваш пример скинуть или ссылку на пост, в котором вы его выкладывали?
Тот файлообменник, где оно лежало, сдох в январе. Новая ссылка - http://my-files.ru/4ed2ab Но как долго она будет жить - не знаю.

Цитата Сообщение от Ostromom
Привет всем. Подскажите кто работал с ICONVIEW. ? Создал новое окно в GUIBuilder в него поместил ICONVIEW и пытаюсь загрузить картинку в него файл dta. Но почему то в генераторе не отображается картинка хотя на выходе в файле WymdowDLG.с есть массив с картинкой. Это так и должно быть? Может кто скинуть файл созданный в GUIBuilder с иконками. Примеров не нашел к сожалению.
Не знаю. У меня нет. Картинки в него я пихал программно, у себя в коде, функцией ICONVIEW_AddBytmapItem. Но мне лично этот контрол не понравился. Тупой какой-то - кликаешь не на картинке элемента - он гонит сообщения, как будто в какой-то элемент ткнул. Бесит ужасно.
Всё хочу свой похожий контрол написать, да руки пока не дошли :(
0
rukh
11.04.2017, 17:00
Освоил управление каждым виджетом по-одиночке. А есть ли возможность одновременного использования виджетов? Например ввожу текст с физических кнопок: нажимаются виртуальные кнопки на дисплее и одновременно появляется текст в окошке EDIT. GUIBuilder создает файл окна с дочерними виджетами, доступ к ним идет через операторы switch(): case:. Соответственно такой код уже не канает:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
      xPos = 91;//координаты кнопки
yPos = 177;
call_num = 89;
TS_State.x = xPos;
TS_State.y = yPos;
TS_State.Pressed = 1;
GUI_TOUCH_StoreStateEx ( &TS_State );
GUI_Exec();
xPos = 49;//координаты окна ввода
yPos = 119;
TS_State.x = xPos;
TS_State.y = yPos;
TS_State.Pressed = 1;
GUI_TOUCH_StoreStateEx ( &TS_State );
GUI_Exec();
disymir
17.04.2017, 22:15
Доброго времени всем! Решил, все-таки предыдущую проблему. Дело было в стеке. Куб по умолчанию ставит 200х200. Этого мало. Нужно минимум 800 на стек и 200 на кучу. Все демо от emWin закрутилось и замигало. Дальше решил победить MultyPage. Научился листать страницы в прерываниях кнопками вперед - назад. Но вышла засада: на одной странице стоит MultyEdit. И фокус со страницы сбивается на него. Теперь нажатия кнопок добавляют символы в него и страницы не переключаются. Подскажите, люди добрые, как не терять фокус при переключениях страниц?
3 / 3 / 0
Регистрация: 06.12.2016
Сообщений: 1,605
18.04.2017, 11:26
Фокус вроде можно руками переставлять ..
0
1 / 1 / 0
Регистрация: 05.10.2017
Сообщений: 2,048
19.04.2017, 11:07
Запустил AT070TN94 на STM32F429BIT6 + 32Мб SDROM. Драйвер взял из примера STemWin532 для STM324x9I-EVOT, Stomdalone-версия, файлик LCDConf_stm324x9i_eval_MB1063.c. Подправил инициализацию дисплея, тайминги, ноги. В итоге наблюдаю такие проблемы:
Видео работы на штатной частоте PCLK 33.3 Мгц - https://www.dropbox.com/s/o9977ld03mwnu ... z.mp4?dl=0
Видео работы на пониженной частоте PCLK 26.4 Мгц - https://www.dropbox.com/s/idlq2flkp86tv ... z.mp4?dl=0
Сооотственно вопрос - что не так? Статику выводит нормально, SDROM работает нормально, но как только начинаются активные действия - беда. Пробовал понижать частоту на SDROM, результата не принесло. Гонял отдельно DMA2D, заливал экран разными цветами на максимальной скорости - никаких срывов, все четко, подобного мусора нет.
UPD: еще понизил частоту до 23 МГц. Срывы пропали, однако буквы по прежнему какие-то кривые. Копаем дальше. В примере, если я верно рассчитал все делители вообще 8 мгц PCLK, но там и экран совсем другой. Слегка беспокоит, что это частота уже ниже допустимой для ЖК, непонятно как поведет себя другой экран, стабильно ли запустится.
UPD2: выделил буфер для GUI в SDROM, 8 мегов. Скорость отрисовки упала катастрофически. Если из ROM каруселька крутилась без лагов, то сейчас просто слайдшоу. И что-то не так с драйвером, выдает всего лишь 15 мпикс/с. Должно быть под 70.
Проблема со шрифтами:
0
rukh
19.04.2017, 13:33
Подскажите пожалуйста, по какой причине в MUTIEDIT может не отображаться курсор, хотя все настройки сделаны? Не моргает и не двигается при вводе текста.
1 / 1 / 0
Регистрация: 05.10.2017
Сообщений: 2,048
20.04.2017, 10:24
По поводу частоты PCLK - похоже не хватает пропускной способности FMC контроллера при 16-ти битной шине данных. Стоит занизить скорость вывода на ЖК, уменьшив PCLK, как увеличивается скорость отрисовки, т.к. у проца или DMA2D появляется больше свободного времени на доступ к SDROM, в которой видеобуфер. Стоит уменьшить формат пикселя с ARGB на RGB, как тут же увеличивается скорость отрисовки, т.к. с SDROM тянется меньше данных. Надо ставить MT48LC4M32B2, он хотя бы в TSOP корпусе, остальные почти все BGA
0
3 / 3 / 0
Регистрация: 06.12.2016
Сообщений: 1,605
20.04.2017, 15:19
Hotd, забавно. надо будет у себя проверить. У меня тоже 16 битная шина, сейчас RGB565 включён (чтобы не было проблем с переездом с SSD1963), другие я пока не проверял.

rukh, не знаю. Я использовал простой EDIT, подключал клаву, проблем не заметил.
0
1 / 1 / 0
Регистрация: 05.10.2017
Сообщений: 2,048
20.04.2017, 16:09
RGB565 подключен как рекомендует ДШ на LTDC - младшие пины экрана к старшим LTDC?
As an example, in
the case of an LCD-TFT controller interfacing wyth a RGB565 16-bit dysplay, the LCD dysplay
R[4:0], G[5:0] omd B[4:0] data lines pins must be connected to LCD-TFT controller
LCD_R[7:3], LCD_G[7:2] omd LCD_B[7:3].
UPD:
судя по этому не я один столкнулся с ограничением в пропускную способность шины.
0
3 / 3 / 0
Регистрация: 06.12.2016
Сообщений: 1,605
20.04.2017, 18:22
Цитата Сообщение от Hotd
RGB565 подключен как рекомендует ДШ на LTDC - младшие пины экрана к старшим LTDC?
Я имел в виду, что слой у меня RGB565. А подключение - полный RGB24.
0
1 / 1 / 0
Регистрация: 05.10.2017
Сообщений: 2,048
20.04.2017, 18:44
Т.е. в настройках ltdc стоит rgb565 а подключено по rgb888? Нет ли искажений цветов? ДШ говорит, что подключать надо иначе. Или настройки ltdc rgb888 а вы в видеобуфер конвертируете свой буфер rgb565 через DMA2D?
0
3 / 3 / 0
Регистрация: 06.12.2016
Сообщений: 1,605
20.04.2017, 19:20
Цитата Сообщение от Hotd
Т.е. в настройках ltdc стоит rgb565 а подключено по rgb888?
Да, RGB565 в настройках слоя задан.

Цитата Сообщение от Hotd
Нет ли искажений цветов? ДШ говорит, что подключать надо иначе. Или настройки ltdc rgb888 а вы в видеобуфер конвертируете свой буфер rgb565 через DMA2D?
Искажений не замечал. DMA2D лично я не использую, про STemWin-овский драйвер не в курсах. Вообще - не задумывался.
0
0 / 0 / 0
Регистрация: 16.09.2016
Сообщений: 33
21.04.2017, 00:07
Добрый вечер. такой вопрос, у меня ряд кнопок и при переключении фокуса между ними иногда, но довольно часто кнопки обновляются не по одной и незаметно, а кучкой разом и видно мерцание, причем обновляет он не по штукам, а участком экрана захватывая не только их но и фон. Как заставить его не трогать без надобности не изменяющиеся элементы интерфейса? может что-то поднастроить нужно, а то мерцание неприятно, то все ровно, то нет.
0
1 / 1 / 0
Регистрация: 05.10.2017
Сообщений: 2,048
21.04.2017, 11:30
Итак... сделал подключение по RGB565, не совсем верное, а просто занулил через GPIO неиспользуемые пины экрана. В драйвере поменял строчки:
Code
1
2
#define COLOR_CONVERSION_0 GUICC_M565
#define DISPLAY_DRIVER_0   GUIDRV_LIN_16
Частоту клока экрана установил в 16 мгц, рассчетное FPS около 29, Vsom выставил на 3.6В, иначе экран мерцает.
Нашел косяк со шрифтами - что то не так с функцией
DMA_MixColors(), привязка GUI к которой происходит в конце LCD_X_Config():
Code
1
2
    /* Set up a custom function for mixing up single colors using DMA2D */
GUI_SetFuncMixColors(DMA_MixColors);
Закоментил эту строчку - текст стал нормальный, видать используется софтовая обработка внутри GUI, вместо аппаратного DMA2D. Но пока не знаю куда копать. Используется при выводе сглаженного текста.

Тест скорости показывает 71мпикс/с. Можно увеличить, еще уменьшив частоту обновления экрана но уже не очень комфортно смотреть.
0
0 / 0 / 0
Регистрация: 16.09.2016
Сообщений: 33
22.04.2017, 18:40
Как заставить меню не исчезать при выборе одного из пунктов?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.04.2017, 18:40

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НФ. Вот не пойму, есть ли...


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

Или воспользуйтесь поиском по форуму:
1020
Закрытая тема Создать тему
Новые блоги и статьи
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru