2. 初识emWin

2.1. emWin是什么

简而言之,emWin(是embed win的缩写)是Segger公司针对嵌入式平台开发的图形软件库, 通过调用emWin提供的函数接口,开发嵌入式图形界面应用变得简单而快捷。

而图形软件库究竟是什么呢?就是一些与图形界面相关的函数,它提供接口给用户调用。 例如,在没有使用图形软件库时,要控制LCD显示一个圆,需要用户自行根据LCD驱动编写画圆的函数,而使用图形界面软件库的话, 这个画圆函数已经由该软件库提供给用户,用户只需要调用这个函数,设置圆的半径、圆心、颜色就可以画出自己想要的圆,不需要再考虑画圆的算法。

2.2. emWin与ucGUI、STemWin的关系

在国内的嵌入式行业中,由于uC/OS系统的名气,大家比较熟悉的嵌入式图形软件库是uC/GUI,但大部分人不知道, 其实uC/GUI是Segger公司为Micrium公司(制作uC/OS的公司)定制的图形软件库,说是定制,但其实它跟emWin的区别并不大, 以致于本人并不知道它们在功能上究竟差别在何处。比较确定的是旧版本uC/GUI在网上还可以找到开源的代码, 而当前新版本的emWin及uC/GUI只对用户提供了库文件,是不开源的。

另外,Segger公司还向ST公司出售了emWin的版权,从而ST公司也得到了定制版的emWin,然后改了名字叫STemWin。 当用户在STM32芯片上使用emWin软件库时,是不需要向Segger或ST付费的。

总而言之,uC/GUI和STemWin都是Segger公司的emWin产品,而且它们的版本编号是统一的, 如uC/GUI目前最新版本命名为uC-GUI V5.48.00,STemWin最新版本命名为STemWin V5.44a, emWin最新版本则为emWinV5.48,所以,要比较这三个软件库功能上的区别,只需要看它们的版本号就可以了。

虽然功能上没有区别,但因为版权付费问题,在实际使用时就需要根据自己的平台来选择。由于我们使用的是STM32开发平台, 自然我们选择的是STemWin。因为如果我们选择的是emWin或uC/GUI使用到STM32产品上,同样是需要向Segger或Micrium公司购买版权的, 而使用STemWin就不存在这个问题。在STemWin里有一个检测机制确定代码所运行的平台,若是STM32芯片,则运行正常,若非STM32芯片,就不能正常使用了。

在本教程后续的讲解中,无特殊说明,不再区分emWin和STemWin。

2.3. emWin的应用场合

emWin并不只是提供了画圆之类的基本绘图函数库,它的主要功能如下:

  • 绘制2-D图形:绘制圆、椭圆、多边形、弧线、线图和饼形图等;

  • 显示位图文件:显示BMP、JPEG、GIF及PNG格式的图片文件;

  • 显示文字:支持显示多国语言的文字,如中英文;

  • 处理用户输入:如键盘、鼠标及触摸屏的人机交互输入处理;

  • 提供各种窗口对象:这些窗口对象也被称为图形控件,最常见的如菜单控件、窗口控件、按键控件、 复选框及框架窗口控件等,有了这些控件,就非常容易地制作出类似windows系统的控制界面了。

emWin的这些功能,就是为了解决人机交互应用的设计难题。而它对ROM和RAM的消耗相对来说并不高。据官方统计, 它们提供的一个基本例程(移植了emWin函数库,显示“HelloWorld”),消耗ROM 60KB,RAM 7KB,这在当前大多数嵌入式平台都是可以接受的。 又因为emWin可以在多任务系统及裸机的平台上运行,尤其适合嵌入式乱七八糟的开发要求, 自然使得emWin在嵌入式人机交互场合中大放异彩。一些使用emWin制作出来的效果,见图 emWin效果演示效果图

emWin效果演示效果图

2.4. emWin支持平台

emWin支持的硬件平台非常广泛,支持几乎所有的16位或32位微控制器,从ARM7、ARM9到Cortex-M3、Cortex-M4、 Cortex-M7再到Cortex-A9都能运行,甚至在Cortex-M0上也能跑。

2.5. emWin配套的软件工具

  • Bin2C:二进制到C转换器。Windows的命令行实用程序,它将二进制文件转换为C数组,以直接包含在目标应用程序代码中。

  • BmpCvtST:位图转换器。它将常见的图像文件格式(如BMP,GIF和PNG)转换为所需的emWin位图格式。

  • emVNC:通用VNC客户端。用于连接到网络中任何设备上的任何VNC服务器。拥有分别适用于Windows、macOS和Linux的不同版本。

  • emWinPlayer:视频播放器。它允许emWin电影文件(EMF)在具有Windows操作系统的计算机上播放。

  • emWinSPY:可直接从目标设备对 RAM 使用情况、窗口管理器内容进行运行时分析,以及进行用户输入和屏幕截图。

  • emWinView:用于在逐步模拟时查看模拟的显示内容的工具。

  • GUIBuilder:界面编辑器。用于显示界面的前期设计,或在不了解 C 语言的情况下设计界面。 emWin的小部件在GUIBuilder可以直接通过拖放来放置和调整大小,而不必编写源代码。可以按上下文菜单添加其他属性, 可以通过编辑小部件的属性来微调。设计好的界面可以保存为 C 文件,直接添加进工程中使用,但是界面的交互逻辑需要用户自定义的代码来实现。

  • JPEG2Movie:视频格式转换器。用于将几乎任何现有的电影格式转换为 emWin 影片文件。

  • U2C:UTF-8编码到C转换器。可将 UTF-8 文本转换为 C 代码,它读取 UTF-8 文本文件,并创建带有 C 字符串的 C 文件。