查看: 4026|回复: 5

STM32下移植UCGUI的教程方法

[复制链接]
  • TA的每日心情
    奋斗
    2020-9-28 10:10
  • 签到天数: 1018 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2012-10-10 09:55:25 | 显示全部楼层 |阅读模式
    分享到:
    在MDK环境下将3.90版本的UCGUI移植到STM32下了,为了方便大家,特写此移植方法,大家可以借鉴(有错误之处,望大家指点出来共同讨论!)
    移植步骤:
    第一步:首先,得把你的TFT底层驱动写好,既在裸机下,可以正常显示。
    第二步:加入UCGUI程序包。
    第三步:配置LCDConf.h GUIConf.h GUITouchConf.h(由于我的液晶不带触摸功能,此配置在此不讲。)
            配置LCDConf.h文件如下:
            #ifndef LCDCONF_H
    #define LCDCONF_H
    #define LCD_XSIZE          (160)   //配置TFT的水平分辨率
    #define LCD_YSIZE          (128)   //配置TFT的垂直分辨率
    #define LCD_CONTROLLER     (54124) //TFT控制器的名称
    #define LCD_BITSPERPIXEL   (16)    //每个像素的位数
    #define LCD_FIXEDPALETTE   (565)   //调色板格式
    #define LCD_SWAP_RB        (0)     //红蓝反色交换
    #define LCD_INIT_CONTROLLER()   TFT_Init() ;        //此处需要定义的是你的TFT初始化函数
            #endif /* LCDCONF_H */

            配置GUIConf.h文件如下:
            #ifndef GUICONF_H
            #define GUICONF_H

    #define GUI_OS                 (1)  //多任务
    #define GUI_SUPPORT_TOUCH      (0)  //触摸
                         #define GUI_SUPPORT_UNICODE    (1)  //Unicode支持  
    #define GUI_DEFAULT_FONT        &GUI_Font6x8  //GUI默认字体  
    #define GUI_ALLOC_SIZE          5000  //动态内存的大小
    #define GUI_WINSUPPORT          1  //窗口控件支持
    #define GUI_SUPPORT_MEMDEV      1  //支持内存设备
    #define GUI_SUPPORT_AA          1  /* Anti aliasing available */

            #endif  /* Avoid multiple inclusion */
    第四步:最关键的一步。那就是让GUI能够找到你的LCD驱动。修改LCDDriver。
            在编写你的TFT底层驱动程序的时候,一定不能忘记编写这两个函数:设置一个像素和获取一个像素的颜色,因为后面很多UCGUI和你的TFT驱动关联起来需要这两个函数为前提。以我的TFT为例:
    void LCD_SetPixel(unsigned short x, unsigned short y, unsigned short color)  
    {
    ….

    }

    unsigned short LCD_GetPixel(unsigned short x, unsigned short y)  
    {
       …

    }
    这两个函数写好,并测试可以正常显示后,接下来需要修改TFT与UCGUI关联的函数(在一个C文件下(我的是ili9320_ucgui.c),建议大家在移植GCGUI之前最好下载个别人移植好的例程,对着修改这样难度降低很多):
    int LCD_L0_Init(void)
    {   
      TFT_Init();
      return 0;
    }
    这个函数,是GCGUI初始化TFT需要调用的,里面的函数就是你TFT底层驱动的初始化函数。
    void LCD_L0_SetPixelIndex(int x, int y, int PixelIndex)
    {
      LCD_SetPixel(x,y,PixelIndex);
    }
    unsigned int LCD_L0_GetPixelIndex(int x, int y)
    {
      return LCD_GetPixel(x,y);
    }
    上面两个函数是其他函数的最基本元素,其他函数比如画线、点、圆都需要调用改函数。里面的LCD_SetPixel(x,y,PixelIndex)、LCD_GetPixel(x,y);就是你TFT底层驱动设置像素和获取像素的两个函数。
    紧接着把该ili9320_ucgui.c文件下其他函数修改一下(凡是遇到设置像素和获取像素的地方用以上两个函数代替。)
    接着,修改另一个C文件(ili9320_api.c)这里修改很简单,仅仅也是将设置像素和获取像素的函数替换掉自己定义的即可。


    最后,网上说需要修改那个GUI_X.c文件,由于我下载的是STM32模板(ILI9320的控制器),那个文件没有修改。
    PS:我的开发环境MDK3.4以上版本,CPU:STM32F103RB  TFT与MCU接口:模拟总线8位 1.8英寸 160×128分辨率的TFT
    UCGUI版本3.90    UCOS版本2.86  在原基础上仅仅修改了以下几个文件:ili9320.c
    、ili9320_ucgui.c 、ili9320_api.c 、GUIConf.h、LCDConf.h
    图片1.jpg




    回复

    使用道具 举报

  • TA的每日心情
    开心
    2019-7-11 11:26
  • 签到天数: 1982 天

    连续签到: 1 天

    [LV.Master]伴坛终老

    发表于 2012-10-10 19:23:50 | 显示全部楼层
    哈哈,这边文章貌似看过了,我原来也是按照这个移植的,很不错的文章
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2020-3-19 13:22
  • 签到天数: 805 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2012-10-12 15:24:56 | 显示全部楼层
    顶起来      
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2017-3-1 00:17
  • 签到天数: 171 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2012-10-16 14:29:56 | 显示全部楼层
    顶起来  。。。。。。。。。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2015-1-1 01:21
  • 签到天数: 354 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2012-10-18 01:13:21 | 显示全部楼层
    这个太详细了!
    标记一下!下次来学习!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2020-9-28 10:10
  • 签到天数: 1018 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2012-10-18 08:28:04 | 显示全部楼层
    wyzamazon 发表于 2012-10-18 08:09
    xinxin原创的?

    嘿嘿,不是的,看到比较好,转过来了!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-12-4 17:31 , Processed in 0.164953 second(s), 25 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.