Не работал с 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)