22.04.2016, 14:14
|
#1
|
Частый гость
Регистрация: 08.10.2009
Сообщений: 21
Сказал спасибо: 6
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
|
stm32f746g-disco и emWin
Начинаю разбираться с stm32f746g-disco ( 32F746GDISCOVERY). Для нее есть примеры в STM32CubeF7 ( STM32Cube_FW_F7_V1.3.0) в частности STM32Cube_FW_F7_V1.3.0\Projects\STM32746G-Discovery\Applications\STemWin\ STemWin_HelloWorld.
Компилирую пример в Keil uVision5 (без оптимизации) - все нормально, HelloWorld выводит.
Создаю кнопку:
Код:
|
hButton = BUTTON_Create(0, 0, 100, 50, GUI_ID_OK, WM_CF_SHOW);
BUTTON_SetText(hButton, "Test");
GUI_Exec(); |
Все нормально:
( Img)
В GUIBuilder.exe делаю простейшее окно (окно + метка), вызываю функцию CreateWindow - ни чего не работает.
Искаженный фон окна и искаженной текст метки.
Причину найти не могу:
( Img)
Может кто сталкивался с таким?
Если у Вас есть плата stm32f746g-disco можете в нее прошить Hex файл, может проблема с платой.
Спасибо.
Исходный код:
Изменено только в BASIC_HelloWorld.c
Код:
|
#include "GUI.h"
#include "DIALOG.h"
WM_HWIN CreateWindow(void);
/************************************************** *******************
*
* Public code
*
************************************************** ********************
*/
/************************************************** *******************
*
* MainTask
*/
void MainTask(void)
{
static BUTTON_Handle hButton;
static WM_HWIN hWin;
/*
// All ok
hButton = BUTTON_Create(0, 0, 100, 50, GUI_ID_OK, WM_CF_SHOW);
BUTTON_SetText(hButton, "Test");
*/
/**/
// Don't work
CreateWindow();
/**/
GUI_Exec();
while (1);
}
/*************************** End of file ****************************/ |
Добавлено только WindowDLG.c
Код:
|
// USER START (Optionally insert additional includes)
// USER END
#include "DIALOG.h"
/************************************************** *******************
*
* Defines
*
************************************************** ********************
*/
#define ID_WINDOW_0 (GUI_ID_USER + 0x00)
#define ID_TEXT_0 (GUI_ID_USER + 0x01)
// USER START (Optionally insert additional defines)
// USER END
/************************************************** *******************
*
* Static data
*
************************************************** ********************
*/
// USER START (Optionally insert additional static data)
// USER END
/************************************************** *******************
*
* _aDialogCreate
*/
static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
{ WINDOW_CreateIndirect, "Window", ID_WINDOW_0, 0, 0, 480, 272, 0, 0x0, 0 },
{ TEXT_CreateIndirect, "Text", ID_TEXT_0, 100, 100, 80, 20, 0, 0x64, 0 },
// USER START (Optionally insert additional widgets)
// USER END
};
/************************************************** *******************
*
* Static code
*
************************************************** ********************
*/
// USER START (Optionally insert additional static code)
// USER END
/************************************************** *******************
*
* _cbDialog
*/
static void _cbDialog(WM_MESSAGE * pMsg) {
WM_HWIN hItem;
// USER START (Optionally insert additional variables)
// USER END
switch (pMsg-›MsgId) {
case WM_INIT_DIALOG:
//
// Initialization of 'Window'
//
hItem = pMsg-›hWin;
WINDOW_SetBkColor(hItem, 0x00FF0000);
//
// Initialization of 'Text'
//
hItem = WM_GetDialogItem(pMsg-›hWin, ID_TEXT_0);
TEXT_SetText(hItem, "Test");
TEXT_SetTextColor(hItem, 0x00FFFFFF);
TEXT_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
TEXT_SetFont(hItem, GUI_FONT_13_1);
// USER START (Optionally insert additional code for further widget initialization)
// USER END
break;
// USER START (Optionally insert additional message handling)
// USER END
default:
WM_DefaultProc(pMsg);
break;
}
}
/************************************************** *******************
*
* Public code
*
************************************************** ********************
*/
/************************************************** *******************
*
* CreateWindow
*/
WM_HWIN CreateWindow(void);
WM_HWIN CreateWindow(void) {
WM_HWIN hWin;
hWin = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0);
return hWin;
}
// USER START (Optionally insert additional public code)
// USER END
/*************************** End of file ****************************/ |
Файлы из: Inc, Src и MDK-ARM.
Hex файл:
STM32746G_DISCOVERY_Button.hex - all ok
STM32746G_DISCOVERY_Window.hex - don't work
Последний раз редактировалось silabs; 22.04.2016 в 14:24.
|
|
|
|
01.05.2016, 01:45
|
#2
|
Прописка
Регистрация: 09.02.2011
Сообщений: 164
Сказал спасибо: 1
Сказали Спасибо 27 раз(а) в 22 сообщении(ях)
|
Re: stm32f746g-disco и emWin
Может что то не так делаем? Аналогичная ситуация и у меня.
Окно правильно не хочет создавать. Код другой но проблема та-же.
|
|
|
|
13.05.2016, 10:20
|
#3
|
Прохожий
Регистрация: 03.12.2014
Сообщений: 5
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: stm32f746g-disco и emWin
проверил ваш код на f4+ssd2119 нормально отрисовывает , копайте в сторону драйвера.
|
|
|
|
31.05.2016, 20:17
|
#4
|
Прохожий
Регистрация: 31.05.2016
Сообщений: 1
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: stm32f746g-disco и emWin
Приветствую.
Специально зарегался, чтоб поделится своим рецептом.
Так же начал с хэлоуворлд, всё красиво. Тут же накидал пробную форму с парой кнопок и получил размазанное изображение. В итоге после курения родных и забугорных форумов сделал следующее:
Правим GUIConf.h
Код:
|
#define GUI_NUMBYTES (1024) * 300 //если гуй не слишком сложный можно и оставить 150
U32 aMemory[GUI_NUMBYTES / 4] @ "GUI_RAM"; // сообщаем линкеру разместить это в регионе памяти с названием GUI_RAM, об этом чуть ниже |
В LCDConf.h если значения отличаются то ставит так:
Код:
|
#define LCD_LAYER0_FRAME_BUFFER ((int)0xC0400000)
#define LCD_LAYER1_FRAME_BUFFER ((int)0xC0600000) |
Теперь конфигурируем память. Насчёт кейла не знаю где там и что, но суть такова: нужно указать линкеру размещать секцию "GUI_RAM" в регионе SDRAM_region (например) и указать для этого региона соответственно начало 0xC0000000 и конец 0xC07FFFFF. В IAR EW это выглядит вот так:
Код:
|
define symbol __ICFEDIT_region_SDRAM_start__ = 0xC0000000;
define symbol __ICFEDIT_region_SDRAM_end__ = 0xC07FFFFF;
define region SDRAM_region = mem:[from __ICFEDIT_region_SDRAM_start__ to __ICFEDIT_region_SDRAM_end__];
place in SDRAM_region { section GUI_RAM }; |
И все эти директивы лежат в файле с расширением icf обычно в папке с проектом.
После таких корректив всё стало на свои места, всё отрисовывается чётко, без всякого "мусора".
Последний раз редактировалось Temskiy; 31.05.2016 в 20:39.
Причина: Неправильно адреса указал
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 03:31.
|
|