5949|10

3238

帖子

5

TA的资源

五彩晶圆(中级)

楼主
 

【水军团】F7之emwin入门学习 [复制链接]

本帖最后由 wateras1 于 2015-10-18 10:36 编辑

emWin 应用的软件架构

Config文件夹
Config 文件夹是显示配置文件包。在 Config 文件夹下,有 GUIConf.cGUIConf.h
LCDConfig.cLCDConfig.h SIMConfig.c 文件,其中前三个文件在实际的嵌入式平台是
非常重要的,它们分别起到了分配存储空间、裁剪 emWin 功能模块和 LCD 底层驱动实现。
LCDConfig.h 文件没有内容,SIMConfig.c 文件是 VS2010 仿真环境需求的一些特定设置,
在此我们不作探讨。关于 GUIConf.cGUIConf.h LCDConfig.c 文件的内容见代码清单
首先看下windows GUIConf.c
#include "GUI.h"
/*********************************************************************
*
*       Defines
*
**********************************************************************
*/
//
// Define the available number of bytes available for the GUI
//
#define GUI_NUMBYTES  0x400000
//
// Define the average block size
//
#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) {
  //
  // 32 bit aligned memory area
  //
  static U32 aMemory[GUI_NUMBYTES / 4];
  //
  // Assign memory to emWin
  //
  GUI_ALLOC_AssignMemory(aMemory, GUI_NUMBYTES);
  GUI_ALLOC_SetAvBlockSize(GUI_BLOCKSIZE);
}
F7环境下的GUIConf.c代码
/*********************************************************************
*          Portions COPYRIGHT 2015 STMicroelectronics                *
*          Portions SEGGER Microcontroller GmbH & Co. KG             *
*        Solutions for real time microcontroller applications        *
**********************************************************************
*                                                                    *
*        (c) 1996 - 2015  SEGGER Microcontroller GmbH & Co. KG       *
*                                                                    *
*        Internet: www.segger.com    Support:  support@segger.com    *
*                                                                    *
**********************************************************************

** emWin V5.28 - Graphical user interface for embedded applications **
All  Intellectual Property rights  in the Software belongs to  SEGGER.
emWin is protected by  international copyright laws.  Knowledge of the
source code may not be used to write a similar product.  This file may
only be used in accordance with the following terms:

The  software has  been licensed  to STMicroelectronics International
N.V. a Dutch company with a Swiss branch and its headquarters in Plan-
les-Ouates, Geneva, 39 Chemin du Champ des Filles, Switzerland for the
purposes of creating libraries for ARM Cortex-M-based 32-bit microcon_
troller products commercialized by Licensee only, sublicensed and dis_
tributed under the terms and conditions of the End User License Agree_
ment supplied by STMicroelectronics International N.V.
Full source code is available at: www.segger.com

We appreciate your understanding and fairness.
----------------------------------------------------------------------
File        : GUIConf.c
Purpose     : Display controller initialization
---------------------------END-OF-HEADER------------------------------
*/

/**
  ******************************************************************************
  * @attention
  *
  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
  * You may not use this file except in compliance with the License.
  * You may obtain a copy of the License at:
  *
  *        http://www.st.com/software_license_agreement_liberty_v2
  *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  *
  ******************************************************************************
  */

#include "GUI.h"
void GUI_TOUCH_X_ActivateX(void)
{
// XPT2046_WriteCMD(0x90);
}


void GUI_TOUCH_X_ActivateY(void)
{
  //XPT2046_WriteCMD(0xd0);
}


int  GUI_TOUCH_X_MeasureX(void)
{
   // return XPT2046_ReadAdc_Fliter(CHY);

}


int  GUI_TOUCH_X_MeasureY(void)
{        

   // return XPT2046_ReadAdc_Fliter(CHX);


}
/*********************************************************************
*
*       Defines
*
**********************************************************************
*/

/* Define the available number of bytes available for the GUI */
#define GUI_NUMBYTES  (128) *  1024

U32 aMemory[GUI_NUMBYTES / 4];
/*********************************************************************
*
*       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)
{
  GUI_ALLOC_AssignMemory(aMemory, GUI_NUMBYTES);
}

/*************************** End of file ****************************/
可以看到windows分配了4MB  静 态 空 间 aMemory,而我们的F7分配了128k.
接 着 调 用 emWin 的 库 函 数GUI_ALLOC_AssignMemory 把 这 个 空 间 分 配 给 emWin , 并 使 用 库 函 数GUI_ALLOC_SetAvBlockSize 设置存储块的平均大小。所以 emWin的库函数使用的存储空间都是 aMemory 中分配的。在嵌入式平台上,我们需要根据其限制控制分配给 emWin 库
的 aMemory 大小,修改宏 GUI_NUMBYTES 即可。

            GUIConfig.h代码
/*********************************************************************
*                SEGGER Microcontroller GmbH & Co. KG                *
*        Solutions for real time microcontroller applications        *
**********************************************************************
*                                                                    *
*        (c) 1996 - 2013  SEGGER Microcontroller GmbH & Co. KG       *
*                                                                    *
*        Internet: www.segger.com    Support:  support@segger.com    *
*                                                                    *
**********************************************************************

** emWin V5.22 - Graphical user interface for embedded applications **
emWin is protected by international copyright laws.   Knowledge of the
source code may not be used to write a similar product.  This file may
only be used in accordance with a license and should not be re-
distributed in any way. We appreciate your understanding and fairness.
----------------------------------------------------------------------
File        : GUIConf.h
Purpose     : Configuration of available features and default values
----------------------------------------------------------------------
*/

#ifndef GUICONF_H
#define GUICONF_H

/*********************************************************************
*
*       Multi layer/display support
*/
#define GUI_NUM_LAYERS      16   // Maximum number of available layers

/*********************************************************************
*
*       Multi tasking support
*/
#define GUI_OS              (1)  // Compile with multitasking support

/*********************************************************************
*
*       Configuration of available packages
*/
#define GUI_SUPPORT_TOUCH   (1)  // Support a touch screen (req. win-manager)
#define GUI_SUPPORT_MOUSE   (1)  // Support a mouse
#define GUI_WINSUPPORT      (1)  // Window manager package available
#define GUI_SUPPORT_MEMDEV  (1)  // Memory devices available

/*********************************************************************
*
*       Configuration of window manager
*/
#define WM_SUPPORT_NOTIFY_VIS_CHANGED (1) // Enable sending of WM_NOTIFY_VIS_CHANGED messages

/*********************************************************************
*
*       Default font
*/
#define GUI_DEFAULT_FONT          &GUI_Font6x8

#endif  /* Avoid multiple inclusion */

/*************************** End of file ****************************/

GUIConf.h 文件聚集了各种与 emWin 功能裁剪相关的宏,如 GUI_NUM_LAYERS 用
于配置 emWin 的最大可用层数(多显示器及复合视图支持),GUI_OS 用于告诉 emWin 是否
运行在带多任务系统的平台上等等,通过设置这些宏,可以方便地根据需要裁剪 emWin 的
大小。

LCDConfig.c 文件内容

/*********************************************************************
*                SEGGER Microcontroller GmbH & Co. KG                *
*        Solutions for real time microcontroller applications        *
**********************************************************************
*                                                                    *
*        (c) 1996 - 2013  SEGGER Microcontroller GmbH & Co. KG       *
*                                                                    *
*        Internet: www.segger.com    Support:  support@segger.com    *
*                                                                    *
**********************************************************************

** emWin V5.22 - Graphical user interface for embedded applications **
emWin is protected by international copyright laws.   Knowledge of the
source code may not be used to write a similar product.  This file may
only be used in accordance with a license and should not be re-
distributed in any way. We appreciate your understanding and fairness.
----------------------------------------------------------------------
File        : LCDConf.c
Purpose     : Display controller configuration (single layer)
---------------------------END-OF-HEADER------------------------------
*/

#include "GUI.h"

/*********************************************************************
*
*       Layer configuration (to be modified)
*
**********************************************************************
*/
//
// Physical display size
//
#define XSIZE_PHYS  320
#define YSIZE_PHYS  240
#define VYSIZE_PHYS (YSIZE_PHYS << 1)

//
// Color conversion
//
#define COLOR_CONVERSION GUICC_8888

//
// Display driver
//
#define DISPLAY_DRIVER GUIDRV_WIN32

/*********************************************************************
*
*       Configuration checking
*
**********************************************************************
*/
#ifndef   VXSIZE_PHYS
  #define VXSIZE_PHYS XSIZE_PHYS
#endif
#ifndef   VYSIZE_PHYS
  #define VYSIZE_PHYS YSIZE_PHYS
#endif
#ifndef   VRAM_ADDR
  #define VRAM_ADDR 0
#endif

#ifndef   XSIZE_PHYS
  #error Physical X size of display is not defined!
#endif
#ifndef   YSIZE_PHYS
  #error Physical Y size of display is not defined!
#endif
#ifndef   COLOR_CONVERSION
  #error Color conversion not defined!
#endif
#ifndef   DISPLAY_DRIVER
  #error No display driver defined!
#endif

/*********************************************************************
*
*       Public code
*
**********************************************************************
*/
/*********************************************************************
*
*       LCD_X_Config
*
* Purpose:
*   Called during the initialization process in order to set up the
*   display driver configuration.
*   
*/
void LCD_X_Config(void) {
  //
  // Set display driver and color conversion for 1st layer
  //
  GUI_DEVICE_CreateAndLink(DISPLAY_DRIVER, COLOR_CONVERSION, 0, 0);
  //
  // Display driver configuration, required for Lin-driver
  //
  LCD_SetSizeEx    (0, XSIZE_PHYS,   YSIZE_PHYS);
  LCD_SetVSizeEx   (0, VXSIZE_PHYS,  VYSIZE_PHYS);
  LCD_SetVRAMAddrEx(0, (void *)VRAM_ADDR);
  //
  // Set user palette data (only required if no fixed palette is used)
  //
  #if defined(PALETTE)
    LCD_SetLUTEx(0, PALETTE);
  #endif
}

/*********************************************************************
*
*       LCD_X_DisplayDriver
*
* Purpose:
*   This function is called by the display driver for several purposes.
*   To support the according task the routine needs to be adapted to
*   the display controller. Please note that the commands marked with
*   'optional' are not cogently required and should only be adapted if
*   the display controller supports these features.
*
* Parameter:
*   LayerIndex - Index of layer to be configured
*   Cmd        - Please refer to the details in the switch statement below
*   pData      - Pointer to a LCD_X_DATA structure
*
* Return Value:
*   < -1 - Error
*     -1 - Command not handled
*      0 - Ok
*/
int LCD_X_DisplayDriver(unsigned LayerIndex, unsigned Cmd, void * pData) {
  int r;

  switch (Cmd) {
  //
  // Required
  //
  case LCD_X_INITCONTROLLER: {
    //
    // Called during the initialization process in order to set up the
    // display controller and put it into operation. If the display
    // controller is not initialized by any external routine this needs
    // to be adapted by the customer...
    //
    // ...
    return 0;
  }
  case LCD_X_SETVRAMADDR: {
    //
    // Required for setting the address of the video RAM for drivers
    // with memory mapped video RAM which is passed in the 'pVRAM' element of p
    //
    LCD_X_SETVRAMADDR_INFO * p;
    p = (LCD_X_SETVRAMADDR_INFO *)pData;
    //...
    return 0;
  }
  case LCD_X_SETORG: {
    //
    // Required for setting the display origin which is passed in the 'xPos' and 'yPos' element of p
    //
    LCD_X_SETORG_INFO * p;
    p = (LCD_X_SETORG_INFO *)pData;
    //...
    return 0;
  }
  case LCD_X_SETLUTENTRY: {
    //
    // Required for setting a lookup table entry which is passed in the 'Pos' and 'Color' element of p
    //
    LCD_X_SETLUTENTRY_INFO * p;
    p = (LCD_X_SETLUTENTRY_INFO *)pData;
    //...
    return 0;
  }
  case LCD_X_ON: {
    //
    // Required if the display controller should support switching on and off
    //
    return 0;
  }
  case LCD_X_OFF: {
    //
    // Required if the display controller should support switching on and off
    //
    // ...
    return 0;
  }
  default:
    r = -1;
  }
  return r;
}

/*************************** End of file ****************************/
LCDConfig.c 文 件 包 含 了 LCD_X_Config 和 LCD_X_DisplayDriver 两 个 函 数 。
LCD_X_Config 函数调用 emWin 库函数 GUI_DEVICE_CreateAndLink 配置了显示驱动及颜
色转换格式,该函数的输入参数是根据 Windows 系统的环境配置的。接着调用
LCD_SetSizeEx 配置了显示尺寸,输入参数是本文件中的两个宏:#define XSIZE_PHYS
320 及 #define YSIZE_PHYS 240,也就是说把屏幕配置成了 320x240 分辨率大小,我们可
以通过修改这两个宏的数值改变仿真时的屏幕尺寸。
LCD_X_DisplayDriver 是提供给 emWin 库的驱动回调函数,该函数根据输入的参数
Cmd 区分要进行的操作,如 LCD_X_INITCONTROLLER 表示初始化液晶控制器,
LCD_X_ON 表示启动液晶屏,LCD_X_OFF 表示关闭液晶屏,这些命令是由用户根据需要
选择性实现的。
在使用 emWin 的应用函数之前,我们需要调用其库函数 GUI_Init 初始化 emWin 运行
的环境,而 GUI_Init 函数会执行我们前面提到的 GUI_X_Config、LCD_X_Config、
LCD_X_DisplayDriver 三个函数,从而完成初始化工作。当我们移植 emWin 时,主要的移
植工作就是根据自己的平台实现这些函数,而 emWin 的上层应用函数无需修改,也无法修
改,因为那些函数都已经编译进库里了,不开放源码。
GUI文件夹
GUI 文件夹是 emWin 库核心文件包。它包含一个 Include 文件夹和一个 Library 文件夹,
在 Include 文件夹里的都是 emWin 库的头文件,由于 emWin 以库的形式提供给用户,所以
必须带有这些头文件以方便我们使用。Library 目录下的 GUI.lib 就是 emWin 的库文件了,
它是编译好的二进制编码,无法查看源程序。在不同的 CPU 平台下,需要使用不同版本的
库,如这个工程里的 GUI.lib 库仅可以用在 windows 的 VC++编译平台下,针对 Cortex-M0
M3 和 M4 芯片及 IAR、MDK 编译环境都有相对应的库文件,使用时要根据自己的平台选
择适当的库文件。

对于在MDK中移植EWMIN需要把 STemWin522_CM3_Keil.lib、
GUIConf.c、LCDConf_FlexColor_Template.c 及 GUI_X.c 文件添加到工程中,另外注意要把头文件路径添加到 Keil 的编译器选项中(以M3为例,其实F7一样)。


emWin 的初始化过程
   在使用 emWin 前,都要先调用GUI_Init 库函数,以初始化 emWin 运行所需要的环境,在这个 GUI_Init 函数里,调用了emWin 底层的配置函数,它按顺序分别调用了 GUI_X_ConfigLCD_X_ConfigLCD_X_DisplayDriver 函数,完成了存储器分配、屏幕类型配置及初始化液晶驱动的工作。这些函数在前面仿真 emWin 的章节已经简要介绍过,在 Win32 仿真环境下的这些函数,已由 Segger 官方配置过,我们无需修改也能正常运行,而在嵌入式平台上,就必须改写这几个函数,以适应特定平台的需求。


GUI_X_Config 函数
GUI_Init 初始化 emWin,最先调用了 GUI_X_Config 函数,该函数在 GUIConf.c 文件
中定义
/* Define the available number of bytes available for the GUI */
#define GUI_NUMBYTES  (128) *  1024

U32 aMemory[GUI_NUMBYTES / 4];
/*********************************************************************
*
*       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)
{
  GUI_ALLOC_AssignMemory(aMemory, GUI_NUMBYTES);
}
从上面可以看到F7为EMWIN分配了128K的空间。



VS2010环境运行模拟器

模拟菜单demo


之前没有接触过emwin,一切从零开始,接下来结合官方demo以及官方api具体研究如何制作属于一些绚丽的GUI.

此帖出自stm32/stm8论坛

最新回复

刚特别跑到st官网确认了一下 STemwin的授权问题。 确实是对stm32 for free。 看起来唯一需要担心的只是 它能否跟上emwin的更新了。 不过这个似乎不需要太在意,作为一个不太在意软件更新的我来说。 因为emwin本身已经够成熟了。 至于看不到源码的问题,还是和前面一样,如果它足够成熟了,那不看也无所谓。 毕竟要改进还是一件很困难的事情。  详情 回复 发表于 2015-11-7 17:03

赞赏

2

查看全部赞赏

点赞 关注(1)
个人签名淘宝:https://viiot.taobao.com/Q群243090717
多年专业物联网行业经验,个人承接各类物联网外包项目
 

回复
举报

1891

帖子

2

TA的资源

纯净的硅(中级)

沙发
 
  这个和 ucGUI 有 撒子区别呢??
此帖出自stm32/stm8论坛

点评

在国内的嵌入式行业中,由于 uC/OS 系统的名气,大家比较熟悉的嵌入式图形软件库 是 uC/GUI,但大部分人不知道,其实 uC/GUI 是 Segger 公司为 Micrium 公司(制作 uC/OS 的公司)定制的图形软件库,说是定制,但其  详情 回复 发表于 2015-10-18 09:00
 
个人签名
分享铸就美好未来。。。




 

回复

1891

帖子

2

TA的资源

纯净的硅(中级)

板凳
 
坐等科普。。。。
此帖出自stm32/stm8论坛
 
个人签名
分享铸就美好未来。。。




 

回复

6105

帖子

4

TA的资源

版主

4
 
谢谢分享!
此帖出自stm32/stm8论坛
 
 
 

回复

3238

帖子

5

TA的资源

五彩晶圆(中级)

5
 
574433742 发表于 2015-10-18 08:11
这个和 ucGUI 有 撒子区别呢??

在国内的嵌入式行业中,由于 uC/OS 系统的名气,大家比较熟悉的嵌入式图形软件库
是 uC/GUI,但大部分人不知道,其实 uC/GUI 是 Segger 公司为 Micrium 公司(制作 uC/OS
的公司)定制的图形软件库,说是定制,但其实它跟 emWin 的区别并不大,以致于本人并
不知道它们在功能上究竟差别在何处。比较确定的是旧版本 uC/GUI 在网上还可以找到开
源的代码,而当前新版本的 emWin及 uC/GUI只对用户提供了库文件,是不开源的。
另外,Segger 公司还向 ST 公司出售了 emWin 的版权,从而 ST 公司也得到了定制版
的 emWin,然后改了名字叫 STemWin。当用户在 STM32 芯片上使用 emWin软件库时,是
不需要向 emWin或 ST公司付费的。
总而言之,uC/GUI 和 STemWin 都是 Segger 公司的 emWin 产品,而且它们的版本编
号是统一的,如 uC/GUI 目前最新版本命名为 uC-GUI V5.3,STemWin 最新版本命名为
STemWin Library V5.3,emWin最新版本则为 emWin V5.3,所以,要比较这三个软件库
功能上的区别,只需要看它们的版本号就可以了。
虽然功能上没有区别,但因为版权付费问题,在实际使用时就需要根据自己的平台来
选择。由于我们使用的是 STM32 开发平台,自然我们选择的是 STemWin。因为如果我们
选择的是 emWin 或 uC/GUI 使用到 STM32 产品上,同样是需要向 Segger 或 Micrium 公司
购买版权的,而使用 STemWin 就不存在这个问题。在 STemWin 里有一个检测机制确定代
码所运行的平台,若是 STM32 芯片,则运行正常,若非 STM32 芯片,就不能正常使用了
此帖出自stm32/stm8论坛

点评

赞一个。。。。。  详情 回复 发表于 2015-10-18 10:19
 
个人签名淘宝:https://viiot.taobao.com/Q群243090717
多年专业物联网行业经验,个人承接各类物联网外包项目
 
 

回复

1891

帖子

2

TA的资源

纯净的硅(中级)

6
 
wateras1 发表于 2015-10-18 07:00
在国内的嵌入式行业中,由于 uC/OS 系统的名气,大家比较熟悉的嵌入式图形软件库
是 uC/GUI,但大部分人 ...

赞一个。。。。。
此帖出自stm32/stm8论坛
 
个人签名
分享铸就美好未来。。。




 
 

回复

2700

帖子

0

TA的资源

五彩晶圆(初级)

7
 
来学习,帮顶
此帖出自stm32/stm8论坛
 
个人签名作为一个水军,就是尽量的多回帖,因为懂的技术少,所以回帖水分大,见谅!
EEWORLD开发板置换群:309018200,——电工们免费装β的天堂,商家勿入!加群暗号:喵
 
 

回复

775

帖子

0

TA的资源

纯净的硅(高级)

8
 
这个F7的活动终于有些文章跟上了。
此帖出自stm32/stm8论坛
 
 
 

回复

1万

帖子

203

TA的资源

管理员

9
 
终于开始启动工作的赶脚~~
此帖出自stm32/stm8论坛
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
 
个人签名玩板看这里:
https://bbs.eeworld.com.cn/elecplay.html
EEWorld测评频道众多好板等你来玩,还可以来频道许愿树许愿说说你想要玩的板子,我们都在努力为大家实现!
 
 

回复

7815

帖子

57

TA的资源

裸片初长成(中级)

10
 
wateras1 发表于 2015-10-18 09:00
在国内的嵌入式行业中,由于 uC/OS 系统的名气,大家比较熟悉的嵌入式图形软件库
是 uC/GUI,但大部分人 ...

其实很多时候,我听网上的人说,emwin或者ucgui几乎就是一回事。

另外,我一般是尽量回避使用需要付费的中间件,之所以考虑emwin,
重要的也就是这个 STemwin的存在。

反正我用的是stm32,不用白不用。
此帖出自stm32/stm8论坛
 
个人签名

强者为尊,弱者,死无葬身之地

 
 

回复

7815

帖子

57

TA的资源

裸片初长成(中级)

11
 
wateras1 发表于 2015-10-18 09:00
在国内的嵌入式行业中,由于 uC/OS 系统的名气,大家比较熟悉的嵌入式图形软件库
是 uC/GUI,但大部分人 ...

刚特别跑到st官网确认了一下 STemwin的授权问题。
确实是对stm32 for free。

看起来唯一需要担心的只是 它能否跟上emwin的更新了。
不过这个似乎不需要太在意,作为一个不太在意软件更新的我来说。
因为emwin本身已经够成熟了。

至于看不到源码的问题,还是和前面一样,如果它足够成熟了,那不看也无所谓。
毕竟要改进还是一件很困难的事情。
此帖出自stm32/stm8论坛
 
个人签名

强者为尊,弱者,死无葬身之地

 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表