stemwin 19264单色屏移植

9 篇文章 0 订阅
5 篇文章 0 订阅

一.GUIConf.C文件的修改  修改emwin内存

/*********************************************************************
*
*       Defines
*
**********************************************************************
*/
//
// Define the available number of bytes available for the GUI
//
#define USE_EXRAM 0//不支持外部SRAM
#define GUI_NUMBYTES (30*1024) //EMWIN 内存
#define GUI_BLOCKSIZE 0X80 //快大小

/*********************************************************************
*
*       Public code
*
**********************************************************************
*/
/*********************************************************************
*
*       GUI_X_Config
*
* Purpose:
*   Called during the initialization process in order to set up the
*   available memory for the GUI.
*/
void GUI_X_Config(void) 
{
    if(USE_EXRAM) //使用外部 RAM
    {
        //从外部 SRAM 中分配 GUI_NUMBYTES 字节的内存
        U32 *aMemory = mymalloc(SRAMEX,GUI_NUMBYTES);
        //为存储管理系统分配一个存储块
        GUI_ALLOC_AssignMemory((U32 *)aMemory, GUI_NUMBYTES);
    }
    else //使用内部 RAM
    {
        //从内部 RAM 中分配 GUI_NUMBYTES 字节的内存
        U32 *aMemory = mymalloc(SRAMIN,GUI_NUMBYTES);
        //为存储管理系统分配一个存储块
        GUI_ALLOC_AssignMemory((U32 *)aMemory, GUI_NUMBYTES);
    }
    

    //设置存储快的平均尺寸,该区越大,可用的存储快数量越少
    GUI_ALLOC_SetAvBlockSize(GUI_BLOCKSIZE);
    GUI_SetDefaultFont(GUI_FONT_6X8); //设置默认字体

//    GUI_DEVICE_CreateAndLink(DISPLAY_DRIVER, COLOR_CONVERSION, 0, 0);
//    LCD_SetSizeEx(0, 128, 64);
//    LCD_SetVSizeEx(0, 128, 64);
//    
}

二.修改GUIConf.H

1. #define GUI_OS                    (1)  // Compile with multitasking support   这里使用FREERTOS 

2.  #define GUI_SUPPORT_TOUCH       (0)  // Support touchscreen  dans单色屏不支持触摸

3.其余xuan选项默认

#define GUI_DEFAULT_FONT          &GUI_Font6x8

#define GUI_NUM_LAYERS            10    // Maximum number of available layers

#define GUI_SUPPORT_MOUSE             (1)    /* Support a mouse */
#define GUI_WINSUPPORT                (1)    /* Use window manager */
#define GUI_SUPPORT_MEMDEV            (1)    /* Memory device package available */
#define GUI_SUPPORT_DEVICES           (1)    /* Enable use of device pointers */

三.GUIDRV_Template.c  修改

1.static void _SetPixelIndex(GUI_DEVICE * pDevice, int x, int y, int PixelIndex)函数的修改  添加单色屏打点函数如下

static void _SetPixelIndex(GUI_DEVICE * pDevice, int x, int y, int PixelIndex) {
    //
    // Convert logical into physical coordinates (Dep. on LCDConf.h)
    //
    #if (LCD_MIRROR_X == 1) || (LCD_MIRROR_Y == 1) || (LCD_SWAP_XY == 1)
      int xPhys, yPhys;

      xPhys = LOG2PHYS_X(x, y);
      yPhys = LOG2PHYS_Y(x, y);
    #else
      #define xPhys x
      #define yPhys y
    #endif
    GUI_USE_PARA(pDevice);
    GUI_USE_PARA(x);
    GUI_USE_PARA(y);
    GUI_USE_PARA(PixelIndex);
    {
      //
      // Write into hardware ... Adapt to your system
      //
      // TBD by customer...
      //
            LCD_DrawDots(xPhys, yPhys, PixelIndex);
    }
    #if (LCD_MIRROR_X == 0) && (LCD_MIRROR_Y == 0) && (LCD_SWAP_XY == 0)
      #undef xPhys
      #undef yPhys
    #endif
}

2.static unsigned int _GetPixelIndex(GUI_DEVICE * pDevice, int x, int y)   添加 单色屏获取某一点的颜色的函数 如下

static unsigned int _GetPixelIndex(GUI_DEVICE * pDevice, int x, int y) {
  unsigned int PixelIndex;
    //
    // Convert logical into physical coordinates (Dep. on LCDConf.h)
    //
    #if (LCD_MIRROR_X == 1) || (LCD_MIRROR_Y == 1) || (LCD_SWAP_XY == 1)
      int xPhys, yPhys;

      xPhys = LOG2PHYS_X(x, y);
      yPhys = LOG2PHYS_Y(x, y);
    #else
      #define xPhys x
      #define yPhys y
    #endif
    GUI_USE_PARA(pDevice);
    GUI_USE_PARA(x);
    GUI_USE_PARA(y);
    {
      //
      // Write into hardware ... Adapt to your system
      //
      // TBD by customer...
      //
      PixelIndex = LCD_GetDots(xPhys, yPhys);
    }
    #if (LCD_MIRROR_X == 0) && (LCD_MIRROR_Y == 0) && (LCD_SWAP_XY == 0)
      #undef xPhys
      #undef yPhys
    #endif
  return PixelIndex;
}

3.static void * _GetDevData(GUI_DEVICE * pDevice, int Index)的修改  如下

static void * _GetDevData(GUI_DEVICE * pDevice, int Index) {
  GUI_USE_PARA(pDevice);
  #if GUI_SUPPORT_MEMDEV
    switch (Index) {
    case LCD_DEVDATA_MEMDEV:
      //return (void *)&GUI_MEMDEV_DEVICE_16; // TBD: Has to be adapted to the right memory device depending on the used color depth!
     /* µ¥É«ÆÁ ·µ»Ø1 */
      return (void *)&GUI_MEMDEV_DEVICE_1; // TBD: Has to be adapted to the right memory device depending on the used color depth!    }
        }
  #else
    GUI_USE_PARA(Index);
  #endif
  return NULL;
}

四.LCDConf_FlexColor_Template.c文件修改

1.修改lcd X Y的尺寸,固定调色板模式为单色 

// 
// Physical display size
//
#define XSIZE_PHYS                               192 // To be adapted to x-screen size
#define YSIZE_PHYS                                64  // To be adapted to y-screen size

#define VXSIZE_PHYS                             192 //给定层虚拟区的X尺寸 (单位像素)
#define VYSIZE_PHYS                              64  //给定层虚拟区的Y尺寸 (单位像素)
#define LCD_CONTROLLER                   UC1604
#define LCD_BITSPERPIXEL                 1
#define LCD_USE_PARALLEL_16        0

//
// Color conversion
//
#define COLOR_CONVERSION   GUICC_1    //单色屏
//
// Display driver
//
#define DISPLAY_DRIVER &GUIDRV_Template_API

2. LCD_X_Config()函数

/*********************************************************************
*
*       LCD_X_Config
*
* Function description:
*   Called during the initialization process in order to set up the
*   display driver configuration.
*
*/
void LCD_X_Config(void) {
  GUI_DEVICE * pDevice;
  CONFIG_FLEXCOLOR Config = {0};
  GUI_PORT_API PortAPI = {0};
  //
  // Set display driver and color conversion
  //
  //pDevice = GUI_DEVICE_CreateAndLink(GUIDRV_FLEXCOLOR, COLOR_CONVERSION, 0, 0);
  GUI_DEVICE_CreateAndLink(GUIDRV_TEMPLATE, GUICC_1, 0, 0);//
    //
  // Display driver configuration, required for Lin-driver
  //
  LCD_SetSizeEx (0, XSIZE_PHYS , YSIZE_PHYS);
  LCD_SetVSizeEx(0, VXSIZE_PHYS, VYSIZE_PHYS);

//  //
//  // Orientation
//  //
//  Config.Orientation = GUI_SWAP_XY | GUI_MIRROR_Y;
//  GUIDRV_FlexColor_Config(pDevice, &Config);
//  //
//  // Set controller and operation mode
//  //
//  PortAPI.pfWrite16_A0  = LcdWriteReg;
//  PortAPI.pfWrite16_A1  = LcdWriteData;
//  PortAPI.pfWriteM16_A1 = LcdWriteDataMultiple;
//  PortAPI.pfReadM16_A1  = LcdReadDataMultiple;
//  GUIDRV_FlexColor_SetFunc(pDevice, &PortAPI, GUIDRV_FLEXCOLOR_F66708, GUIDRV_FLEXCOLOR_M16C0B16);
}

五.添加 GUI_X_FreeRTOS.C 

因为使用的freertos 所以需要添加STemWinLibrary522\OS目录下的GUI_X_FreeRTOS.C 

六.添加stemwin库  STemWin522_CM4_OS_Keil.lib  

我是用的STM32F407 支持操作系统 su  所以添加STemWin522_CM4_OS_Keil.lib  

至此编译然后修改就可以了

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值