移植顺序为裸机移植TFT的驱动可以正常点亮,接着移植裸机的emwin,最后再将emwin移植到OS。
TFT的裸机驱动网上有很多,确定接线正确,确定驱动程序正确,剩下的就是一些很隐蔽的问题。比如IAR for arm关于int型解释为32位,short是16位。在定义数据地址时遇到了这样的问题。
我们移植的前提是已知驱动程序,emwin中包括的驱动不在我们考虑范围之内
裸机驱动正常后移植裸机emwin。STemwin支持的是5.2的emwin,想要移植最新的5.3版本的emwin。MDK5以上自带emwin的包,是个很方便的事情。所以下载并安装破解MDK for ARM,安装中间件,在中间件的文件夹下面能找到emwin(C:\Keil_v5\ARM\Pack\Keil\MDK-Middleware\6.5.0\emWin)或者是7.0.目录树如下

Doc存放的是说明文档,5.3的最新手册也在里面。
Include里面放的是H文件,复制并粘贴到我们的工程里面。
Lib里面放的是lib文件,不过全是.lib的,所以IAR不能用。选择我们所需的.lib文件复制到我们的工程里面
Tool里面放的是一些小工具。
Sample里面放的就是我们需要移植的文件。

其中红圈的文件是我们需要的文件,将他们复制并粘贴在自己的工程中。GUI_X里面有各种各样的文件,segger已经帮我们做好了各种OS的驱动,比如我们常用的RTX ,embOS, uCOS,直接复制就可以用,修改的很少。这里我们用的是裸机,所以复制的是GUI_X.c。其他文件的作用可以一一查看文件的开头,注释的都非常清楚。
emwin本身支持一款TI的触摸芯片ADS7846,在TouchConf文件夹下。不过我们用的不是这个,所以用到的是GUI_X_Touch_Analog.c。同样,移植Touch的前提是我们已知触摸芯片的驱动程序。
在工程中添加上述文件,添加包含路径。红框内为我们添加的emwin 的程序。注意文件属性为只读,需要修改。

1.将 GUIConf.h中
#define GUI_OS 1 // Compile with multitasking support
1 #define GUI_SUPPORT_MOUSE 1 // Mouse support
改为0
2.将GUIConf.c中
#define GUI_NUMBYTES 0x200000
这个值改小,因为我们的芯片RAM没有这么大。改为50*1024或者更小,够用就行。
3.LCDConf.c
#define XSIZE_PHYS 480
#define YSIZE_PHYS 272
修改为我们需要的,比如修改为
#define XSIZE_PHYS 854
#define YSIZE_PHYS 480
#define COLOR_CONVERSION GUICC_8888
这个是支持8888的颜色,我们需要的是565,修改为GUICC_565
#define DISPLAY_DRIVER GUIDRV_WIN32
这个是支持PC的模拟,我们需要把它改成
#define DISPLAY_DRIVER &GUIDRV_Template_API,这样他就支持GUIDRV_Template.c的驱动
4.在GUI_X.c最后面添加
void GUI_X_Unlock (void){}
void GUI_X_Lock (void){}
U32 GUI_X_GetTaskId(void){return 0;}
void GUI_X_InitOS (void){}
完成后此时再编译,应该是没有错误的。
5.修改GUIDRV_Template.c
我们至少需要准备两个函数,一个打点函数,一个初始化函数。

红框内添加打点函数

这里添加TFT驱动初始化函数
6.修改GUI_X.c
这个文件主要是用于GUI的心跳,
volatile GUI_TIMER_TIME OS_TimeMS;中GUI_TIMER_TIME这个是enwin的定义,外部引用的话比较麻烦,直接将它修改为unsigned int,即volatile unsigned int OS_TimeMS;然后再在SysTick_Handler中添加函数使emwin跑起来

至此,没有优化的emwin就算移植完成,搞一个简单的demo,跑一下看看效果