您好,欢迎访问三七文档
UCGUI在STM32上移植教程1说明开发板芯片型号STM32F103VET6板载液晶型号ILI9341所需准备资料UCGUI3.90源码一个工程模板为了节约时间,此处所用模板为野火M3工程模板(3.5.0)制作时间---2013-08-07ByNUAA---Kylin2移植过程讲解2.1首先打开工工程模板,页面如下,这个模板工程很简单2.2在工程模板中新建两个文件夹2.2.1命名为GUI与Mylib2.2.2在GUI文件夹下添加以下内容上述图片为UCGUI3.90源码中的一些文件夹进入UCGUI3.90源码文件夹/Start,将Config文件夹原封不动的拷过来进入UCGUI3.90源码文件夹/Start/GUI文件夹,将其中所有文件夹拷过来在GUI文件夹下新建GUI_X文件夹,进入UCGUI3.90源码文件夹/Sample/GUI_X文件夹中,如果带操作系统应该拷贝GUI_X_uCOS.c,如果不带操作系统拷贝GUI_X.c,在这里我们将将GUI_X.c拷贝到新建GUI_X文件夹。2.2.3各文件夹说明1)AntiAlias:9个C文件,主要用于抗锯齿的显示效果。2)ConvertColor:彩色显示的色彩转换支持。3)ConvertMono:(b/w)和灰度显示的色彩转换支持。4)Core:核心文件,提供了GUI基本的功能。5)Font:字库。6)JPEG:图片操作函数。7)LCDDriver:LCD驱动程序8)MenDev:Memorydevice支持。这个东西可用在很多情况下,但最主要的功能是防止在项目重叠时,防止屏幕的闪烁。9)Widget:窗体控件库。10)WM:窗口管理库。11)Config:配置文件。12)GUI:源代码。13)GUI_X:操作系统接口函数。2.3添加组及源文件2.3.1将GUI文件夹下的所有文件夹添加到GROUP右键工程工程项目名选择managecomponents将这些组全部添加上如图2.3.2然后除了LCDDriver以及Font不AddFiles其他的都将对应文件夹下的内容添加进来原因如下:因为不同液晶需要不同的驱动,字体的话也是自行选择。完成后如下图所示2.3.3添加头文件路径2.3.4完成以上操作之后开始编译因编译时间较长,编译过程中将Config组下的GUIConf.h改成如下图所示,初步移植,这些功能可以先关掉,修改内容如图另外将Config组下的GUITouchConf.h改成如下图所示其他部分删掉将Config组下的LCDConf.h改成如下图所示2.3.5编译完发现存在很多错误如下图所示,不过还好错误都是一些未定义的2.3.6错误解决首先看第一个错误,缺少字体文件,所以右键组Font将Font文件夹下的Font6x8.c添加进组其他未定义的内容有:LCD_L0_SetLUTEntryLCD_L0_SetOrgLCD_L0_SetPixelIndexLCD_L0_DrawBitmapLCD_L0_DrawHLineLCD_L0_FillRectLCD_L0_InitLCD_L0_OnLCD_L0_XorPixelLCD_L0_DrawVLineLCD_L0_GetPixelIndex解决方法:在GUI/LCDDriver/目录下新建一个LCD_GUI.c文件,并添加到组LCDDriver当中,由于这些错误都是未定义的,所以我们新建这样一个文件进行定义点击菜单栏Edit选择findinfiles找到函数声明的位置,会发现这些定义都在LCD_protected.h当中,将他们拷贝出来,放入LCD_GUI.c文件当中intLCD_L0_Init(void){}//要有返回值,不然编译报错可以写return0;voidLCD_L0_SetLUTEntry(U8Pos,LCD_COLORcolor){}voidLCD_L0_SetOrg(intx,inty){}voidLCD_L0_SetPixelIndex(intx,inty,intPixelIndex){}voidLCD_L0_DrawBitmap(intx0,inty0,intxsize,intysize,intBitsPerPixel,intBytesPerLine,constU8GUI_UNI_PTR*pData,intDiff,constLCD_PIXELINDEX*pTrans){}voidLCD_L0_DrawHLine(intx0,inty0,intx1){}voidLCD_L0_FillRect(intx0,inty0,intx1,inty1){}voidLCD_L0_On(void){}voidLCD_L0_XorPixel(intx,inty){}voidLCD_L0_DrawVLine(intx,inty0,inty1){}unsignedintLCD_L0_GetPixelIndex(intx,inty){}2.3.7液晶驱动程序由于不同液晶的驱动程序不一样,所以直接拷贝对应液晶的驱动程序即可这里我直接拷贝野火教程中自带的液晶驱动程序bsp_ili9341_lcd.h,bsp_ili9341_lcd.c到LCDDriver文件夹的当中并添加到组LCDDriver当中并在LCD_GUI.c文件中添加下列头文件#includeLCD_Private.h#includeGUI_Private.h#includebsp_ili9341_lcd.h完成这些任务后就离成功不远了2.4Mylib文件夹内容添加2.4.1添加自己以前编好的底层函数如我这边有添加如下函数,其实刚开始移植加不加都无所谓2.4.2新建文件夹FSMC另外在Mylib再新建下一个文件夹FSMC进行配置,不过已经配置好了,在附件可添加函数当中,拷贝过来即可,并将内容添加到组Mylib当中(FSMC说明:FSMC(FlexibleStaticMemoryController,可变静态存储控制器)是STM32系列中内部集成256KB以上FlaSh,后缀为xC、xD和xE的高存储密度微控制器特有的存储控制机制。之所以称为“可变”,是由于通过对特殊功能寄存器的设置,FSMC能够根据不同的外部存储器类型,发出相应的数据/地址/控制信号类型以匹配信号的速度,从而使得STM32系列微控制器不仅能够应用各种不同类型、不同速度的外部静态存储器,而且能够在不增加外部器件的情况下同时扩展多种不同类型的静态存储器,满足系统设计对存储容量、产品体积以及成本的综合要求。)最后组视图如下:在main函数当中添加头文件说明#includeGUI.h#includeFSMC.h#includeLCD_Protected.h这个时候编译不会再出现错误,不过具体的功能未能实现2.5函数功能添加在bsp_ili9341_lcd.c文件中查找相应的函数加入到LCD_GUI.c当中,下面举两个例子,其他的自行添加,如下方截图Main函数测试
本文标题:UCGUI移植教程
链接地址:https://www.777doc.com/doc-2852658 .html