查看: 1243|回复: 0
打印 上一主题 下一主题

uCGUI移植战舰STM32详解

[复制链接]
跳转到指定楼层
沙发
发表于 2015-9-18 10:44:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
首先自己建立一个MDK工程,在此放上我自己工程,方便大家直接在此进行修改。


bsp为底层驱动层,内部所有的函数均以bsp(
Board Support Package
)前缀开头,工程中添加了uC/OS但是实际并没有使用,为uCGUI建立了一些空的文件,方便直接添加.c.h文件。
准备uCGUI源码,我是用的是uCGUI3.90a版本。

移植开始。。。。。。。。。。。。。。。。。。。
1.将BSP文件夹下面的LCD文件夹修改名字为ILI9341,将lcd.c修改为ili9341.c,lcd.h修改为ili9341.h,因为在 uCGUI/GUI/Core 下已经存在lcd.c和lcd.h了。文件名字可以随便起,因为我的液晶控制器为ILI9341。。。
2.修改工程,移除bsp下lcd.c重新添加ili9341.c,修改后编译会有几个错误,都是因为头文件包含的原因 将#include"lcd.h"改成#include "ili9341.h“或者将#include "lcd/lcd.h"  改为#include " ili9341/ili9341.h"即可编译通过
最好将ili9341.h中的预处理指令的名字也改成 ILI9341.
3.将 ili9341.h文件中宏定义(#define LCD  ((LCD_TypeDef *) LCD_BASE) )中的LCD修改为ILI9340,因为LCD这个名字uCGUI也有用到,否则会冲突,你会发现莫名的100多个错误,呜呜,不多说了,我闲哭会。
4.接下来将源码文件夹下  /Sample/GUI_X 和 /Start/Config,/Start/GUI复制到工程文件夹UCGUI下。按照名字将GUI_X,GUI/(除了JPEG),Config下的.c.h添加到工程中
   工程    uCGUI/Config下添加3个.h配置文件
             uCGUI/GUI_X下只添加GUI_X.c
             uCGUI/GUI/LCDDriver下只添加LCDDummy.c
             其余的则将对应文件夹下的.c文件全部添加到工程中
   添加完毕后,点击魔术棒 包含路径。
5.编译,发现会有19个错误,莫慌
6.打开  uCGUI/Config下GUIConf.h进行配置,主要是一些功能开关,暂时全部关闭,等需要时在打开即可
           #define GUI_OS                              (0)
           #define GUI_SUPPORT_TOUCH         (0)  
           #define GUI_SUPPORT_UNICODE       (0)

           #define GUI_DEFAULT_FONT          &GUI_Font6x8
          //#define GUI_ALLOC_SIZE             12500  
          #define GUI_ALLOC_SIZE                40*1024
          #define GUI_WINSUPPORT                0  
          #define GUI_SUPPORT_MEMDEV        0  
          #define GUI_SUPPORT_AA                0  
7.打开 uCGUI/Config下LCDCon.f根据自己的液晶尺寸以及控制器等具体信息进行配置(对源文件的无用函数和#define命令都删了,修改后如下,最下面的两行需要自己手动添加)
           首先在该文加下包含 #inclide“ili9341.h”因为要使用到液晶初始化函数。
          #define LCD_XSIZE      (240)
          #define LCD_YSIZE      (320)  

          //#define LCD_BITSPERPIXEL  (8)
         #define LCD_BITSPERPIXEL     (16)
         #define LCD_CONTROLLER      (-1) /*液晶控制器型号,-1=LCDDummy.c   -2=LCDNull.c  也可以设置成你自己的控制器型号如果你确定uCGUI支持的话例如设置为 9320是可以的。*/
         #define LCD_SWAP_RB           (1)  /*RED BLUE反色交换*/
         #define LCD_INIT_CONTROLLER() bsp_lcd_init(); /*液晶初始化*/
8.打开 uCGUI/GUI/LCDDriver下的LCDDummy.c文件进行修改
         #if (LCD_CONTROLLER == -1) \
              && (!defined(WIN32) | defined(LCD_SIMCONTROLLER))
        修改为   #if (LCD_CONTROLLER == -1)    即把第2行和那和反斜杠删了就好,这样就可以进行编译了
9.点击编译。。。。。bang  bang  bang  bang----》编译通过 无错误无警告,But 并没有什么卵用 还需要添加几个函数
10.打开 uCGUI/GUI/LCDDriver下LCDDummy.c找到函数  LCD_L0_FillRect(),LCD_L0_GetPixelIndex(),LCD_L0_SetPixelIndex()修改后函数如下:(包含头文件#include "ili9341/ili9341.h")
void LCD_L0_SetPixelIndex(int x, int y, int PixelIndex)
{
  /* Convert logical into physical coordinates (Dep. on LCDConf.h) */
  #if LCD_SWAP_XY | LCD_MIRROR_X| LCD_MIRROR_Y
    int xPhys = LOG2PHYS_X(x, y);
    int yPhys = LOG2PHYS_Y(x, y);
  #else
    #define xPhys x
    #define yPhys y
  #endif
  /* Write into hardware ... Adapt to your system */
  {
    bsp_lcd_fastDrawPoint( x,y,PixelIndex );
  }
}
unsigned int LCD_L0_GetPixelIndex(int x, int y) {
  LCD_PIXELINDEX PixelIndex;
  /* Convert logical into physical coordinates (Dep. on LCDConf.h) */
  #if LCD_SWAP_XY | LCD_MIRROR_X| LCD_MIRROR_Y
    int xPhys = LOG2PHYS_X(x, y);
    int yPhys = LOG2PHYS_Y(x, y);
  #else
    #define xPhys x
    #define yPhys y
  #endif
  /* Read from hardware ... Adapt to your system */
  {
    PixelIndex = bsp_lcd_readPoint( x,y );/* ... */
  }
  return PixelIndex;
}
void LCD_L0_FillRect(int x0, int y0, int x1, int y1)
{
    bsp_lcd_fill( x0,y0,x1,y1,LCD_COLORINDEX );
}
11.这回是真的完事了,好像也不是那么麻烦哈,编译通过 ,main.h中包含 #include "gui.h" 编写程序测试移植结果
12.main.c中有个简单的测试程序,需要的话下载后测试即可,此处补贴出程序了(测试程序是从别的帖子复制的,我叫小偷,谢谢)        
此帖仅是我本人移植时个人见解,可能有不足之处请谅解,透光石借鉴了很多网上及本论坛网友的帖子,感谢有助于我完成本帖的那些大牛们。
带触摸屏的学习Ing,等功成在来水帖。转载

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入中科因仑

本版积分规则

快速回复 返回顶部 返回列表