emWin作为一款非常成熟的GUI,移植是非常方便的,只需简单添加几个文件,修改几个函数即可。
第一步:先确保已经成功驱动LCD了,然后准备三个函数:
初始化函数DrvLCD_Init(void)、
画点函数DrvLCD_DrawPoint(u16 x,u16 y, u16 color)、
填充函数DrvLCD_FillRect(u16 xStar, u16 yStar, u16 xEnd, u16 yEnd, u16 color);
第二步:复制emWin文件,先在项目文件夹下新建emWin文件夹,先复制源码的文件:
GUI_X.C、
GUIConf.c、
GUIConf.h、
GUIDRV_Template.c、
GUIDRV_Template.h、
LCDConf_FlexColor_Template.c、
LCDConf_FlexColor_Template.h、
STemWin522_CM4_Keil.lib,然后复制整个inc文件夹。
第三步:新建一个空白的LCDConf.h,放在emWin文件夹下。
第四步:修改文件,
打开GUIDRV_Template.c,删除_SetPixelIndex函数的内容,然后改为DrvLCD_DrawPoint((u16)x, (u16)y, (u16)PixelIndex);,删除_FillRect函数的内容,然后改为DrvLCD_FillRect((u16)x0, (u16)y0, (u16)x1, (u16)y1, LCD_COLORINDEX);
打开LCDConf_FlexColor_Template.c,删除LCD_X_Config、LCD_X_DisplayDriver以外的函数,再删除LCD_X_Config函数的内容,然后改为
GUI_DEVICE_CreateAndLink(&GUIDRV_Template_API, GUICC_565, 0, 0);
LCD_SetSizeEx (0, XSIZE_PHYS , YSIZE_PHYS);
LCD_SetVSizeEx(0, VXSIZE_PHYS, VYSIZE_PHYS);
注意GUI_DEVICE_CreateAndLink的形参是“&GUIDRV_Template_API”,而不是原来的“GUI_DEVICE_CreateAndLink”;
LCD_X_DisplayDriver函数里面的LCD_X_INITCONTROLLER下加入DrvLCD_Init();
第五步:启动GUI,启动函数是GUI_Init();,但在启动前必须先打开CRC,所以要在前面添加RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_CRC,ENABLE);