本文使用的是单独移植ucGUI到STM32开发板来制作不涉及uCOS系统移植。在进行ucGUI移植前先简单介绍本次用到的ucGUI;众所周知,ucGUI是一种嵌入式系统中的图形设计软件,我们可以利用它来制作操作界面、图像等用于在显示器上显示;ucGUI以其高效的独立于处理器和ili9320(本设计的LCD控制器)的图形接口、优秀的灰度颜色管理和强大的窗口管理体系,在图形设计领域占据了一席之地。
本文的移植是正是利用ucGUI (V 3.90 版)作为源代码,移植到自己建好且编译无误的STM32完整工程上;接下来修改其中的头文件和C文件使其匹配自己的开发板,调试运行无误后,在主程序中调用窗体框架程序显示界面。试运行没有错误,能完美显示界面,移植完成。
移植具体步骤如下:
STEP1: 打开源代码的文件夹将其文件路径”start-config”以及 ”start-GUI”复制到工程目录下的GUI文件夹中;复制文件路径”sample-GUI_X.c”到工程文件目录”config”中;这样文件复制的部分已完成的差不多,第二步就开始修改文件。
STEP2: 在user中打开工程文件test,在keill中添加之前加入的工程文件。
STEP3: 分别修改config 文件夹中的 “LCDconf.h”、GUIConf.h”、”GUITouchConf.h”和LCDWin.c。
1) LCDconf.h 文件修改
该部分文件主要配置LCD的分辨率以及像素等;本设计是240*320的分辨率;
按照本次设计的需求代码修改配置如下:
#ifndef LCDCONF_H
#define LCDCONF_H
#define LCD_XSIZE (240) /* lcd 的水平分辨率,根据自己的具体修改 */
#define LCD_YSIZE (320) /* lcd 的垂直分辨率,根据自己的具体修改 */
#defineLCD_BITSPERPIXEL (16) /* lcd 颜色深度*/
#defineLCD_CONTROLLER (-1) /* lcd 控制器的具体型号,下面细讲*/
#defineLCD_FIXEDPALETTE (565) /*RGB 颜色位数*/
#defineLCD_SWAP_RB (1) /*红蓝反色交换*/
#defineLCD_INIT_CONTROLLER() TFT_Init(); /*这里源代码是 LCD_Config() ,本设计中将其改为自己编写的显示器初始化函数是TFT_Init 即可*/
#endif
2) GUIConf.h 文件修改
这里是ucGUI一些功能的配置,0 是关闭,1 是打开;
按照本次设计的需求代码配置如下:
#ifndefGUICONF_H
#define GUICONF_H
#define GUI_OS (0) /* 操作系统的支持,当用到ucos系统移植时需要打开*/
#define GUI_SUPPORT_TOUCH (1) /* 触摸屏的支持,这里我们需要用到,选择打开*/
#define GUI_SUPPORT_UNICODE (0) /* 初始关闭,如果使用汉字库设置为1*/
#define GUI_DEFAULT_FONT &GUI_Font6x8 /* 自定义显示字体大小*/
#define GUI_ALLOC_SIZE 5000 /* 分配的动态内存空间 */
#define GUI_WINSUPPORT 1 /* 窗口功能支持 */
#define GUI_SUPPORT_MEMDEV 1 /* 内存管理 */
#define GUI_SUPPORT_AA 1 /* 抗锯齿功能,设置为打开,可提高显示效果 */
#endif
3) GUITouchConf.h文件修改
这里是GUI触摸屏的一些设置;
#ifndefGUITOUCH_CONF_H
#defineGUITOUCH_CONF_H
#defineGUI_TOUCH_AD_LEFT 3900 //最左方的AD值
#defineGUI_TOUCH_AD_RIGHT 200 //最右方的AD值
#defineGUI_TOUCH_AD_BOTTOM 3900 //最下方的AD值
#defineGUI_TOUCH_AD_TOP 280 //最上方的AD值
#defineGUI_TOUCH_SWAP_XY 1
#defineGUI_TOUCH_MIRROR_X 0
#defineGUI_TOUCH_MIRROR_Y 1
#endif
4) LCDWin.c文件修改
这里是修改一些LCD的驱动函数,这样才能使ucGUI能够顺利的找到LCD 的底层驱动并且进行调用。
具体修改如下:
1. 打开LCDWin.c文件,在头文件中加入”#include “ili93xx.h”。
2. 将源代码中的预处理命令#if (LCD_CONTROLLER == -1) && (!defined(WIN32)|defined(LCD_SIMCONTROLLER)) 中 后 半 部 分 的 删 掉 ,改为 #if(LCD_CONTROLLER == -1)即可,如果不这样修改会使整个LCDDummy.c 文件都不会编译。
3. 在文件中找到 void LCD_L0_SetPixelIndex(int x, int y, int PixelIndex)这个函数(转换成有逻辑的物理坐标),把其中函数去掉,添加一个自己在ili93xx.h里自己定义的画点函数;void ili9320_SetPoint(xPhys, yPhys ,PixelIndex);。
4. 找到unsigned int LCD_L0_GetPixelIndex(int x, int y) 在其函数中添加读点函数PixelIndex =LCD_ReadPoint(x,y)。
STEP4:添加LCD底层驱动文件“ili93xx.c”和“ili93xx.h”到工程文件GUI-LCDDriver 文件夹下;
STEP5:保存并执行编写的程序,调试至无误。