本人的处女贴,大家多多关注啊,关于ucGUI的移植-裸奔的

2019-08-19 18:13发布

fficeffice" /> ucGUI移植笔记 最近在弄ucGUI的移植,网上搜了不少资料,也问了同学,总算把简单的一个程序弄好了,也感谢openedv论坛和hua290565456的网友,看了他的贴子,才恍然大悟弄好。 该程序是直接用的原子大哥的TFTLCD显示的例子,直接拿过来移植的,感谢原子大哥的程序,在我学习STM32的旅途上帮助我不少。 所用到的是原子大哥TFTLCD例子(库函数版本)和ucGUI3.90源码。 建工程就不说了,附件里有,相信大家也看到别人建的工程了,下面直接说重点。   1.       如果LCD驱动文件是lcd.clcd.h,最好改为别的名字,比如ili93xx.cili93xx.h。然后还要把LCD_Init()初始化函数改为LCDx_Init() 2.       需要改的地方:         A. LCDConf.h中按照下面的图就行,其余的可以删除掉,注意红框中是刚刚改过的LCD初始化函数,改为刚刚更改的初始化函数就行。
 
    B.接下来事GUIConf.h中的设置,目前只是用到简单的一个现实函数,多以就全部设为0

    C. 这个是LCD驱动函数的修改,这三个最好改红框选中的文件

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



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

 

有人纳闷了,为什么把LCD初始化函数
给注释掉了没关系在前面  文件中不是有个宏定义嘛
这个宏定义已经在  这个文件中调用,见下图哦



    还有一项特别注意的,如果你用原子大哥的LCD初始化函数,移植完后,你会发现你的屏幕先白屏一下之后就马上黑屏,而且后面无论设置什么颜 {MOD}都是这样的情况。在调用GUI_Init()的时候,这个函数会进入LCD_Init(),然后再LCD_Init()函数里面有这样的语句
#if (GUI_DEFAULT_BKCOLOR != GUI_INVALID_COLOR)
   /* Clear video memory */    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的帖子里的话,觉得很有用,就粘贴过来了。   这就是一个基本的ucGUI的移植。该笔记放在附件了,有工程和源码,还有此贴的word文档。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
49条回答
pizhihui1993
1楼-- · 2019-08-22 09:15
能啊,我用的战舰板子!
498650771
2楼-- · 2019-08-22 13:40
顶楼主
戴上耳机听歌
3楼-- · 2019-08-22 13:48
楼主,你帖子的最后,我加不加这句 LCD_Clear(WHITE);  都会出现你说的问题
xouou_53320
4楼-- · 2019-08-22 16:08
 精彩回答 2  元偷偷看……
pizhihui1993
5楼-- · 2019-08-22 19:40
感谢大家热心的回复,可惜考研了,好久没看论坛了,那些代码也没时间看了,大家找热心的人讨论哦, 
实在不行的话可以叫我扣扣912458257聊哦,看到会热心的解答
蓝色沸点
6楼-- · 2019-08-22 21:27
楼主,好像掉了一个步骤:ili93xx.h里的下面的结构体定义要移到ili93xx.c里
 typedef struct
{
u16 LCD_REG;
u16 LCD_RAM;
} LCD_TypeDef;     
#define LCD_BASE        ((u32)(0x6C000000 | 0x000007FE))
#define LCD             ((LCD_TypeDef *) LCD_BASE)
不然出现错误:
..GUICoregui.h(451): error:  #18: expected a ")"
..GUICoregui.h(451): error:  #79: expected a type specifier
..GUICoregui.h(451): error:  #168: a function type is not allowed here
compiling ili93xx.c...
compiling LCDDummy.c...
..GUILCDDriverLCDDummy.c(422): error:  #134: expected a field name
..GUILCDDriverLCDDummy.c(438): error:  #134: expected a field name

一周热门 更多>