ucGUI移植笔记-完善版

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ucGUI移植笔记完善版

最近在弄ucGUI的移植,网上搜了不少资料,也问了同学,总算把简单的一个程序弄好了,也感谢openedv论坛和hua290565456的网友,看了他的贴子,才恍然大悟弄好。

该程序是直接用的原子大哥的TFTLCD显示的例子,直接拿过来移植的,感谢原子大哥的程序,在我学习STM32的旅途上帮助我不少。

所用到的是原子大哥TFTLCD例子(库函数版本)和ucGUI3.90源码。

建工程就不说了,附件里有,相信大家也看到别人建的工程了,下面直接说重点。

补充说明:如果你移植的时候怎么也不成功,大部分原因是GUI无法初始化LCD。考虑两方面的原因:

一、你写的底层驱动程序;

二、底层驱动程序与GUI系统的接口,即GUI的配置。

所有的问题几乎都是出现在这两方面,造成GUI无法成功调用正确的底层初始化程序。

所以:

1.确保你的底层驱动在没有移植GUI之前,能顺序驱动LCD成功。

2.然后,确保你的底层驱动接口没有与上层GUI有相同的公共的变量。可以有同名的变

量,但所有的变量都必须是私有的。也就是原子哥的那个结构体LCD不能在.h中定义。

如果LCD驱动文件是lcd.c和lcd.h,最好改为别的名字,比如ili93xx.c和ili93xx.h。然后还要把LCD_Init()初始化函数改为LCDx_Init();因为GUI系统已经有名为LCD.c的文件和LCD_Init()的函数。总而言之,确保你的底层的接口文件(xx.h)没有与上层同名的公共变量。

3.修改GUI系统与底层的接口:

A.LCDConf.h中按照下面的图就行,其余的可以删除掉,一定要删除其他的,因为有

相同的LCD_CONTROLLER定义,会造成硬件出错而进入硬件出错中断死循环。注意红框中是刚刚改过的LCD初始化函数,改为刚刚更改的初始化函数就行。

B.接下来是GUIConf.h中的设置,目前只是用到简单的一个现实函数,多以就全部设

为0

C.然后是LCDDummy.c。这个是LCD驱动函数的修改,这三个最好改红框选中的文

接下来就是更改的第一块,首先的把第1部所更改的相应的LCD底层函数的头文件加进来,不然ucGUI没办法正常工作。然后就是第二个红框给为自己的驱动芯片型号。

再就是第二块,找到画蓝线的两个函数,用方框里的函数取代,如果是用原子大哥的,第一个函数必须要用快速画点函数,因为函数参数里有颜色这个参数,画点函数没有,如果是别的程序,也是一样,加入画点函数就行,但必须要有颜色的参数。第二个函数就是读取某点的颜色值的函数,加进来就行,我这儿直接就用了原子大哥的程序。

需要强调的一点是,这些GUI与底层的接口的宏,必须正确书写,否则GUI无法与底层驱动成功连接。

4.最后修改主函数

以上要给注释掉,使用GUI的初始化语句GUI_Init()。让GUI 去调用底层的初始化语句来初始化配置LCD。如下:

在前面文件中不是有个宏定义

这个宏定义已经在这个文件中调用,见下图哦

还有一项特别注意的,移植完后,你发现,

1.LED指示灯闪烁,但屏幕一直黑屏,说明程序成功运行到while循环,但GUI没有成功调用底层的初始化程序,而是直接返回0。说明你在修改GUI的配置文件时,书写不正确。就是那些宏定义的变量.

2. LED指示灯没有闪烁,屏幕一直黑屏,说明程序没有成功运行到while循环, GUI也没有成功调用底层的初始化程序。可能是你用了原子哥的库函数版本的LCD驱动。库函数版本的驱动在初始化函数里面有一个pringf()打印函数,要把它去掉,与GUI系统的冲突。

3.有人说,屏幕先白屏一下之后就马上黑屏,而且后面无论设置什么颜色都是这样的情况。在调用GUI_Init()的时候,这个函数会进入LCD_Init(),然后在LCD_Init()函数里面有着样的语句

#if (GUI_DEFAULT_BKCOLOR != GUI_INVALID_COLOR) LCD_SetDrawMode(GUI_DRAWMODE_REV);

LCD_FillRect(0,0, GUI_XMAX, GUI_YMAX); LCD_SetDrawMode(0);#endif

这句#if (GUI_DEFAULT_BKCOLOR != GUI_INVALID_COLOR)里面的GUI_DEFAULT_BKCOLOR 初值是OXFFFF,GUI_INVALID_COLOR 初值也是0XFFFF,而原子哥的初始化函数最后有一句LCD_Clear(WHITE);这样就把

GUI_INVALID_COLOR 的值设置成了0X0000;导致调用了下面的三个函数。从而出现上面的问题。只要把原子哥的初始化函数LCD_Clear(WHITE); 注释掉就不会错了,小问题大错误。这是引用的hua290565456的帖子里的话,觉得很有用,就粘贴过来了。

其实不准确,本人用库函数版本和寄存器版本两个版本的驱动程序测试完全没有问题。而且GUI的GUI_DEFAULT_BKCOLOR和GUI_INVALID_COLOR并不是0xFFFF,而是:

GUI_DEFAULT_BKCOLOR为0x000000,GUI_INVALID_COLOR为0xffff。应该是那个pringf()打印函数造成的。

这就是一个基本的ucGUI的移植。

相关文档
最新文档