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

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

21.12.2013, 23:06. Показов 835257. Ответов 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
Регистрация: 06.12.2016
Сообщений: 322
22.04.2017, 19:30
Студворк — интернет-сервис помощи студентам
[QUOTE="Hotd"]RGB565 подключен как рекомендует ДШ на LTDC - младшие пины экрана к старшим LTDC?
[QUOTE="Цитата:[/QUOTE]
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].
Интересно, что куб, при выборе формата подключения 565, дает линиям индексы, совпадающие с линиями дисплея. [7..3], [7..2], [7..3].
Мне кажется, что это гораздо удобнее. При нумерации от 0, я несколько раз ошибался с подключением :) (не на стм32)
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 322
22.04.2017, 19:35
Цитата Сообщение от Hotd
Т.е. в настройках ltdc стоит rgb565 а подключено по rgb888? Нет ли искажений цветов? ДШ говорит, что подключать надо иначе. Или настройки ltdc rgb888 а вы в видеобуфер конвертируете свой буфер rgb565 через DMA2D?
Сорри за возможно глупое уточнение, но надо различать физическое подключение дисплея и формат данных в графической памяти. Дисплей можно подключить по 8,8,8, а данные использовать 8-ми битные - 256 цветов или даже 256 градаций серого. LTDC все как то сам преобразует без участия DMA2D.
0
ybrioth
25.04.2017, 01:40
Всем доброго времени суток есть борда STM32F429I-DISC1 опробовал все что мог.... Возникла потребность в подключении STEmWin в совокупности с FriiRTOS... Использую CubeMX + Keil 5. При попытках добавить(перенести с примеров) EmWin в свой проект сталкиваю с кучей ошибок типа ..\EmWin\LCDConf_stm32f429i_disco_MB1075 .c(262): warning: #223-D: function "__HAL_RCC_GPIOF_CLK_ENABLE" declared implicitly. Если у кого есть возможность помочь в подключении прошу ответить (возможна связь по скайпу и вайберу) (my e-mail [URL="mailto:tom-m@ya.ru">tom-m@ya.ru[/URL])
3 / 3 / 0
Регистрация: 06.12.2016
Сообщений: 1,605
25.04.2017, 13:55
ybrioth, про STemWin+FriiRTOS могу сказать только одно - надо брать версю либы с _OS в имени.
__HAL_RCC_GPIOF_CLK_ENABLE -- к STemWin не относится, она порты вообще не трогает никак, это какая-то чисто кубовая штука. Точнее не скажу, кубом я не занимаюсь, понятия не имею, что там такое.
Но судя по ошибке - вы где-то забыли какой-то .h подключить, где этот __HAL_RCC_GPIOF_CLK_ENABLE объявлен.
0
ybrioth
25.04.2017, 18:39
Да так и есть не подключены заголовочные файлы это я знаю, но проблема в том, что в сэмпле от стм заголовочные файлы вынесены в main.h и подключаются в LCDconf через #include "main.h". Как только я провожу аналогичную процедуру ошибки в LCDconf пропадают но появляются ошибки во всех остальных линкуемых стандартных файлах из библиотеки хал причем он даже перестает видеть типы uint32_t и тд. Стандартный сэмпловский проект компилится на ура (только он без оси). Пытался сделать глобальные инклюды результат аналогичен всю голову уже себе изломал.

Все файлы подключены с OS (хотя уже как только не пробовал)
0 / 0 / 0
Регистрация: 19.08.2014
Сообщений: 430
27.04.2017, 12:57
А можно в gui не закрыв предыдущей страницы перейти на новую выполнить операцию и сразу вернуться на предыдущею страницу?
Пример прибор отображает страницу результатов измерения. Пользователь захотел считать их из памяти прибора в память компьютера. Нажимает кнопку читать данные на верхнем П.О. прибор отображает PROGBAR передачи данных в компьютер. По завершению переходить на страницу измерения.
0
3 / 3 / 0
Регистрация: 06.12.2016
Сообщений: 1,605
27.04.2017, 16:26
А зачем так сложно?
Выводите второе окно с прогресс-баром, которое само закроется по завершении передачи.
Первому окну можно сделать WM_Hide - оно исчезнет, затем WM_Show - оно появится.
0
ybrioth
29.04.2017, 20:06
может у кого есть сэмпл freertos stemwin под мою борду
3 / 3 / 0
Регистрация: 06.12.2016
Сообщений: 1,605
29.04.2017, 21:23
Так он у всех есть. В репозитории куба - путь примерно такой: C:\Users\<usir>\STM32Cube\Repository\STM 32Cube_FW_F4_V1.16.0\Projects\STM32F429I-Dysc
overy\Applications\STemWin

Я, правда, его не смотрел, не знаю, что там да как.

Себе писал сам на F439 и свой дисп. FriiRTOS или нет - для гуя практически фиолетово, но либу надо брать с буковками OS в имени файла.
0
0 / 0 / 0
Регистрация: 07.10.2011
Сообщений: 108
04.05.2017, 18:49
Пытаюсь разобраться с инициализацией библиотеки. Разбираюсь с примером для STM32f429I-Dysco
в AN написано, что сначала вызывается функцияв
Code
1
2
3
4
5
void GUI_X_Config(void) {
...
static U32 aMemory[GUI_NUMBYTES / 4] __attribute__ ((section (".sdram_data"))); //!Добавил атрибут, чтобы переменная линковалась в SDROM, в примере его не было
...
}
Как видно, в ней выделяется память заданного размера aMemory

Позже вызывается
Code
1
2
3
4
LCD_X_Config()->LCD_SetVROMAddrEx(i, (void *)(layer_prop[i].address));
где layer_prop[0].address = LCD_LAYER0_FROME_BUFFER;
и
#define LCD_LAYER0_FROME_BUFFER  ((uint32_t)0xD0200000)
т.е. это макрос задает адрес второго банка SDROM

Вопрос такой. Это разные буферы или один и тот же?
Если один и тот же, то не понятно как сначала компилятором выделяется память под aMemory (не известно где он ее разместит), а потом где-то задается постоянный адрес
0
3 / 3 / 0
Регистрация: 06.12.2016
Сообщений: 1,605
04.05.2017, 19:30
Выделит в секции .sdram_data. Адрес и длину секции Вы задаёте сами в скрипте линкера.
Я у себя задал адрес начала секции после фрейм буфера LTDC. Поэтому они никогда не пересекутся, хоть и лежат в одной SDROM.

Я выкладывал мой скрипт линкера здесь -
0
0 / 0 / 0
Регистрация: 21.11.2013
Сообщений: 36
04.05.2017, 20:38
кстати о фреймбуферах недавно решал проблему, правда для F7
https://arm-stm.btogspot.com/2017/04/st ... emwin.html
0
0 / 0 / 0
Регистрация: 07.10.2011
Сообщений: 108
04.05.2017, 21:50
Цитата Сообщение от kotf2109
кстати о фреймбуферах недавно решал проблему, правда для F7
https://arm-stm.btogspot.com/2017/04/st ... emwin.html
Вот примерно это я и хотел увидеть. Т. е сначала выделяется память под gui, а потом из выделенной области берутся указатели на фрейм буферы. Т. е память фактически одна и та же. Я правильно понял?
0
3 / 3 / 0
Регистрация: 06.12.2016
Сообщений: 1,605
04.05.2017, 22:31
Вы неправильно поняли. Там речь вообще не про фрейм буферы, а про обычную память для гуя (она туда кладёт инфу про контролы окон, сохраняет куски изображения - для спрайтов и т.п.).
Там даже ничего не говорится про тип дисплея. может там вообще SSD1963, которому фрейм буфер не нужен.
0
0 / 0 / 0
Регистрация: 07.10.2011
Сообщений: 108
04.05.2017, 23:32
Попробую по-другому
Значит в GUI_X_Config() выделяется память для нужд GUI, а в LCD_X_Config() определяется память, размером с экранный буфер, в которой будет формироваться конечное изображения для вывода на экран. И LTDC будет перекачивать данные в экран непосредственно из последнего буфера.
Без использования STemWin у меня получилось вывести картинку, заранее скопированную в буфер SDROM.
Для этого взял из примера инициализацию слоя
Code
1
2
3
4
5
6
7
8
static uint16_t player1Buff_dbg[TOTAL_WIDTH*TOTAL_HEIGHT] __attribute__ ((section (".sdram_data")));
...
LTDC_LayerCfgTypeDef pLayerCfg;
...
pLayerCfg.FBStartAdress = player1Buff_dbg;
memcpy(player1Buff_dbg, pImg, 2*480*272);
...
HAL_LTDC_ConfigLayer(&hltdc, &pLayerCfg, 0)
Буфер, адрес которого указывается в LCD_X_Config() и player1Buff_dbg это одно и то же?
0
3 / 3 / 0
Регистрация: 06.12.2016
Сообщений: 1,605
05.05.2017, 17:34
Цитата Сообщение от vom_di_tuxi
Буфер, адрес которого указывается в LCD_X_Config() и player1Buff_dbg это одно и то же?
Насколько я понял - да.
В LCD_X_Config вы задаёте адрес Вашего фреймбуфера функцией LCD_SetVROMAddrEx.
0
3 / 3 / 0
Регистрация: 06.12.2016
Сообщений: 1,605
05.05.2017, 21:37
А задам-ка и я вопрос - может кто ответит :)

Столкнулся я с одной странной ситуацией.
Железо - STM32F439IIT6, 32MB ROM, LTDC 800x480.
STemWin v5.32 (вроде последняя), ейный буфер - 3 метра, по данным функции GUI_ALLOC_GetMemInfo загрузки больше 50% не видел. На проце висит SD карта (SDIO) и 2 USB флэшки. Всё это добро крутится на FriiRTOS.
Есть у меня окно просмотра каталогов, там есть фича вывода картинок. Картинки выводятся стандартными гуёвыми функциями GUI_BMP_DrawScatidEx/GUI_JPEG_DrawScatidEx/GUI_GIF_DrawSubScatidEx. Также вычитываются размеры картинок соответствующими функциями гуя.

Странность заключается в том, что одни и те же картинки (включая размеры) прекрасно выводятся с флэшек, а с SD карты они не выводятся.
Если быть точным, то:
1. Размеры в большинстве случаев определяются верно, хотя бывают и сбои (возвращаются нули).
2. Сама отрисовка либо не рисует ничего, либо рисует прямоугольник серого цвета. Функция отрисовки возвращает 1. Что это значит - хз, в доке ничего, кроме того, что это ошибка, я не нашёл. Если рисуется bmp, то рисуется нечто цветное, с диагональными полосами, напоминающее кадр с экрана советского кинескопного телевизора со сбитой настройкой.

Вначале думал, что у меня траблы с SDIO, но тестил её миллион раз, да и FatFS её распознаёт, каталоги читаются нормально, вывел один из "сбойных" JPEG-ов библиотекой чана (внаглую, поверх изображения гуя) - всё прекрасно.

Кто-то знаёт, чё эт за хрень?
0
0 / 0 / 0
Регистрация: 30.07.2012
Сообщений: 72
07.05.2017, 00:49
Смотрите, что у Вас в реализации функции получения данных для GUI_BMP_DrawScatidEx/GUI_JPEG_DrawScatidEx/GUI_GIF_DrawSubScatidEx. Нигде ли не крашится буфер при чтении из флешки и sd карты, это одна функция и Вы просто в качестве параметра void * p для GUI_GET_DATA_FUNC * pfGetData передаете только путь к файлу или разные в Вашей реализации?
Попробуйте сделать дамп получаемых данных через функцию GUI_GET_DATA_FUNC для содержимого одинаковых файлов с флешки и карты, например в som и сравните... что то подсказывает, что проблема где то там.
0
3 / 3 / 0
Регистрация: 06.12.2016
Сообщений: 1,605
07.05.2017, 12:49
Угу. Придётся ....
0
rukh
16.05.2017, 17:21
Добрый день.

Вот такой вопрос появился. Как задать картинку в качестве фона или заставки на дисплее?
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.05.2017, 17:21

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


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

Или воспользуйтесь поиском по форуму:
1040
Закрытая тема Создать тему
Новые блоги и статьи
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