开始打算用RTGUI这个是国人开发的,是RT-Thread的一个组件,看过官方的Demo做的很是漂亮,于是就打算用它了,开始找各种资料。通过了解得之RealTouch4088是学习RTT的一把“钥匙”,但是本人有点菜,这把“钥匙”没有帮助我打开RTGUI的大门。于是就有个今天这篇博客,STemWin还是梅姐给我推荐,她这个资料比较多,适合我这样比较菜的人。
好多人只知道ucGUIi,但却不知道emWIn(我也不例外)。其实这两个gui是同一个公司开发的,ucGUI是XP的,而emWin是win7的,也就是低版本的叫ucGUI,高版本的叫emWIn。了解的emWin,接下来就往自己的硬件平台上移植了。
1、获取库文件。
首先,在ST的官网获取源码,目前最新版本是5.22。http://www.st.com/web/en/catalog/tools/PF259225 打开这个页面,点击最下面的Download就可下载了。
下载完里面的东西很多,我们只需找到Libraries-->STemWinLibrary522这个文件夹就可以了。
2、在工程中添加库文件。
如图:
要想了解各个文件的作用可以看看它的使用手册,上面有详细的介绍。
3、修改程序,配置emWin
首先了解emWin初始化程序,如图:
如图可知要初始化emWin,则只需调用GUI_Init()即可,下面我就需要配置下面就个函数了。
GUI_X_Config()
在初始化过程开始时即调用,以确保将存储器分配给emWin。这个函数调用了GUI_ALLOC_AssignMemory()和GUI_ALLOC_SetAvBlockSize(),以将一个存储块分配给emWin,并设置存储块的平均尺寸。
LCD_X_Config()
此函数在GUI_X_Config()之后立即调用。该程序的主要目的是创建一个显示驱动器件,并选择颜色转换程序。另外,它还负责设置显示尺寸。如果使用触摸屏,则也需要在此进行配置。配置如下:
void LCD_X_Config(void) {
GUI_DEVICE * pDevice;
CONFIG_FLEXCOLOR Config = {0};
GUI_PORT_API PortAPI = {0};
//
// Set display driver and color conversion
//
pDevice = GUI_DEVICE_CreateAndLink(GUIDRV_FLEXCOLOR, GUICC_M565, 0, 0);
//
// Display driver configuration, required for Lin-driver
//
LCD_SetSizeEx (0, XSIZE_PHYS , YSIZE_PHYS);
LCD_SetVSizeEx(0, VXSIZE_PHYS, VYSIZE_PHYS);
// 这是配置触摸屏的参数
// GUI_TOUCH_Calibrate(GUI_COORD_X, 0, 240, TOUCH_AD_TOP, TOUCH_AD_BOTTOM);
// GUI_TOUCH_Calibrate(GUI_COORD_Y, 0, 320, TOUCH_AD_LEFT, TOUCH_AD_RIGHT);
//
// Orientation
//配置显示屏的方向
Config.Orientation = GUI_SWAP_XY;
// Config.Orientation = GUI_MIRROR_X;
GUIDRV_FlexColor_Config(pDevice, &Config);
//
// Set controller and operation mode
//
PortAPI.pfWrite16_A0 = LcdWriteReg;
PortAPI.pfWrite16_A1 = LcdWriteData;
PortAPI.pfWriteM16_A1 = LcdWriteDataMultiple;
PortAPI.pfReadM16_A1 = LcdReadDataMultiple;
GUIDRV_FlexColor_SetFunc(pDevice, &PortAPI, GUIDRV_FLEXCOLOR_F66702, GUIDRV_FLEXCOLOR_M16C0B16);
}
这里面的GUIDRV_F;ECVOLOR_F66702参数很重要,这个得根据自己的控制芯片具体配置,可以参考数据手册,如下:
我用的ssd1289的控制芯片所以就GUIDRV_FLEXCOLOR_F66702这个参数,大家可以根据具体情况填写。
接下来就编写主函数了,但是必须加上RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_CRC, ENABLE);使能RCC时钟,具体因为不知。接下就可以运行官方的Demo了。直接上图,这里有个问题,就是白颜色的字体模糊,也不知道什么原因。希望有人能告知原因!!
总结:这对于底层和应用层,感觉驱动层是最难的。既要满足底层硬件的初始化和相应资源的配置,所以在移植之前,必须保证自己的驱动是正确的,我是在rtt下移植的,所以可以用finsh这个组件单个测试驱动,比较方便。
本来还用触摸屏来着,但是由于驱动没有弄好再加上代码没有整理太乱(估计你看完就不该喷了),等我移植好把代码规范化之后,会上传一个基于RTT+emWin的Demo。