STemWin介绍

STemWin介绍nbsp 本期教程开始带领大家了解一下 STemWin 的基本知识 其实确切的讲应该叫 emWin 基础知识 由于教程使用的开发板是 ST 的微控制器 所以就把名字统一命名成 STemWin 为什么叫 STemWin 在下面会有详细的讲解 1 1STemWin emWin CGUI 之间的关系 1 2SEGGER 公司介绍 1 3STemWin 介绍 1 4STM32F103 和 407 跑 STemWin 性

 

本期教程开始带领大家了解一下STemWin的基本知识,其实确切的讲应该叫emWin基础知识,由于教程使用的开发板是ST的微控制器,所以就把名字统一命名成STemWin(为什么叫STemWin,在下面会有详细的讲解)。

1.1 STemWin,emWin,μCGUI之间的关系

1.2 SEGGER公司介绍

1.3 STemWin介绍

1.4 STM32F103和407跑STemWin性能测试

1.5 STemWin论坛

1.6 总结

1.1  STemWin,emWin,μCGUI之间的关系

这个放在最开头进行说明,因为很多的初学者比较的迷惑。

对于一些刚学GUI的用户来说,知道μCGUI的比较多,而不知道所谓的emWin或者STemWin。这个并不奇怪,主要是因为大部分人只知道SEGGER公司的做的JLINK,而不知道他们还有RTOS和相关的中间件(中间件的意思就是基于RTOS的文件系统,GUI,USB主机和设备协议栈等)。

1.1.1       μCGUI在国内比较火的原因

μCGUI在国内前几年比较火的原因有三点:

l  一个是μCOS-II在国内的推广,自从Micrum公司出的那本《嵌入式实时操作系统μCOS-II》发布之后,国内关于μCOS-II的资料就是普天盖起,再加上各种培训机构和开发板的推广,μCOS-II就在国内火起来了。μCOS-II火的同时,它配套的中间件,特别是μCGUI就跟着在国内火了起来。

l  前几年国内有一个μCGUI的论坛,这个论坛在国内的μCGUI方面应该算是做得最好的,特别是那个站长在μCGUI方面的研究,这位站长对于μCGUI在国内的发展功不可没。

l  还有一个原因就是μCGUI是带有源码的,很多时候可以通过修改部分的源码实现一些特殊的功能,现在网上流传的μCGUI的源码已经不知道经过多少人的手被修改过,最原始的的代码已经在官网上面找不到了。

1.1.2       emWin和μCGUI的关系

首先要明白,这两个GUI是一个东西。最初这个GUI就是SEGGER公司的,然后以什么的方式授权给μCGUI就不清楚了。现在SEGGER公司是这个GUI的主要推动者,已经将其授权给了多个芯片生产厂家。

1.1.3       STemWin和emWin的关系

STemWin是SEGGER公司授权给ST(意法半导体)的。使用ST芯片的用户可以免费使用STemWin。其实不光授权给了ST,还有NXP,Energy Micro等。凡是使用这些芯片厂商生产的处理器都可以免费的使用emWin。但是出于一定的保护措施,使用STemWin的库是不能用在其它芯片厂商的处理器上面的。因为在工程初始化STemWin前要使能CRC校验。如果没有使能,STemWin是启动不起来的。KEIL MDK的安装目录里面也带有emWin软件包,这个软件包也不是可以直接使用的,用户需要给KEIL MDK注册RL-ARM才可以使用。

这里STemWin还针对ST的微控制器做了专门的优化,比如在使用ST的F4XX微控制器带FPU的芯片时,STemWin在需要浮点处理的地方专门做了优化。

1.1.4       emWin5.xx版本和以前版本的不同

emWin发展到5.0版本以后已经产生了很大的更新,特别是底层驱动方面。emWin5.xx版本向下完全的兼容低版本,当然包括μCGUI5.xx以下的版本,也就说如果用户有在μCGUI5.xx以下版本建立的工程,完全可以用在高版本上面(条件是没有修改过源码)。这里不建议初学者修改源代码,修改过后会破坏现有的机制。在以后的使用中会养成不好的习惯,只要某些功能无法实现就去修改源码,随着修改的增多会严重的破坏现有的机制。

emWin5.xx以后的版本只有库,没有源码。对于一些想研究源码的,可以看早期的版本,了解一下通讯机制。不过对于大多数从应用角度出发的,完全没有必要学习源码,源码内容太多。对于一些无法实现的功能,在emWin5.xx上面得到了很大的改善,基本不需要修改源码。如果通过各种方法实在无法实现,完全可以使用emWin支持的用户控件设计方法做一个符合要求的。

1.2  SEGGER公司介绍

SEGGER公司应该算是一家老牌的调试工具以及RTOS及中间件的生产商。SEGGER公司成立于1997年,到现在的2014年,有差不多17年的历史了,这家公司主要有两个office,一个是在德国的Hilden,另个在美国的 Massachusetts。官网还有一个他们工作地方的照片,看着很不错,我这里也把这个照片贴上。

 

SEGGER公司的产品主要有三个方向,分别如下:

1.2.1       RTOS及其中间件

SEGGER公司的RTOS是embOS,在国内知道的人可能比较少。SEGGER做的embOS和中间件都是以库的形式供用户下载的,除非购买了使用权。产品主要如下:

l  embOS  (Real Time Operating System)

l  embOS/IP  (TCP/IP Stack)

l  emWin (Graphic Software & GUI)  

l  emFile (File System)

l  emUSB Device (USB Device Stack)

l  emUSB Host (USB Host Stack)

l  emModbus(Modbus Stack)

emModbus是今年(2014年)刚刚发布的。

1.2.2       J-Link 调试工具

J-Link应该大家都不陌生,它是有SEGGER公司设计的。具体的J-Link产品有好几款,具体如下:

l  J – Link PRO

l  J – Link ULTRA+

l  J – Link PLUS

l  J – Link

l  J – Trace Cortex-M3

l  J – Trace ARM

1.2.3       Production Programmers

这个工具在国内用的比较少,主要如下几款产品:

l  Flasher  ARM

l  Flasher  RX

l  Flasher  STM8

l  Flasher  ST7

l  Flasher  5

l  Flasher  5 PRO

 

上面说的这三项应该算是SEGGER公司的主营产品,更详细的可以上面他们的官网www.segger.com

进行了解。

1.3  STemWin介绍

emWin5.xx版本设计出来的界面还是非常漂亮的,先贴几个相关的设计图片,让大家有一些感官的认识。

1.3.1       STemWin设计界面

l  第一幅是官方设计的图片

l  下面的是在STM32-V5开发板上面实现的界面

总的来说这些界面还是非常漂亮的,关于STM32-V5开发板更详细的资料可以看如下两个地址:

http://bbs.armfly.com/read.php?tid=1285

http://bbs.armfly.com/read.php?tid=1139

 

目标系统必须具有:

l  一个CPU(8/16/32/64位)

l  一个具有最小内存的RAM和ROM

l  一个完整图形显示器 (任何类型和任何分辨率)

    存储器要求取决于使用的是软件的哪部分以及目标编译器的效率。因此不可能指定精确的值,但是以下值适用于典型的系统。

小系统 (无窗口管理器)

l  RAM:100字节

l  堆栈:600字节

l  ROM:10-25 kb(取决于所使用的功能)

大系统 (包含窗口管理器和小工具)

l  RAM:2-6 kb(取决于所需的窗口数)

l  堆栈:1200-1800字节 (取决于所使用的功能)

l  ROM:30-60 kb(取决于所使用的功能)

    请注意,如果应用程序使用了很多字体,则对ROM的要求会提高。上述所有值都是粗略估算值,不保证能正常使用。

1.3.3       特性

emWin设计用于提供高效且独立于处理器和显示控制器的图形用户界面,用于任何使用图形显示进行操作的应用。它与单任务和多任务环境、专用操作系统或具有任何商业RTOS兼容,emWin的发货形式为C语言源代码。它可适用于任何尺寸的、具有任何显示控制器和CPU的物理和虚拟显示器。其特性包括:

一般特性

l  支持使用任何控制器的任何 (单色、灰度或彩色)显示器 (如果有正确的驱动)。

l  在较小显示器上无显示控制器也可运行。

l  使用配置宏可支持任何接口。

l  显示尺寸可配置。

l  可在显示器上的任何点 (而不仅仅是在偶数位字节地址)上写入字符和位图。

l  已针对尺寸和速度优化了各种例程。

l  利用编译时间切换可进行不同优化。

l  对于较慢的显示控制器,可在存储器中缓存显示,将存取操作减到最少,从而获得非常高的速度。

l  结构清晰。

l  支持虚拟显示;虚拟显示可大于实际显示。

图形库

l  支持不同色深的位图。

l  可使用位图转换器。

l  绝对无浮点使用。

l  快速线/点绘制 (不使用浮点)。

l  圆形/多边形绘制非常快速。

l  不同的绘图模式。

字体

l  基本软件配备多种不同的字体:4*6、6*8、6*9、8*8、8*9、8*16、8*17、8*18、24*32以及像素高度为8、10、13、16的比例字体。

l  可以定义新的字体并只需简单链接。

l  只有应用程序使用的字体才实际链接到生成的可执行程序,从而使ROM使用最小。

l  字体可分别在X和Y方向完全缩放。

l  可使用字体转换器;主机系统 (即Microsoft Windows)上有的任何字体都可以转换。

字符串/值输出例程

l  例程可以十进制、二进制、十六进制、任何字体形式显示值。

l  例程可以十进制、二进制、十六进制、任何字体形式编辑值。

窗口管理器(WM)

l  完整的窗口管理操作,包括裁剪。窗口的客户区以外的区域不可能被覆盖。

l  窗口可以移动和调整大小。

l  支持回调例程 (可选择是否使用)。

l  WM使用最小的RAM(每个窗口大约50字节)。

PC界面外观的可选小工具

l  提供各种小工具 (窗口对象,也称为控件)。它们通常自动操作并且简单易用。

支持触摸屏和鼠标

l  对于按钮小工具等窗口对象,emWin提供触摸屏和鼠标支持。

PC工具

l  模拟脉冲查看器。

l  位图转换器。

l  字体转换器。

1.3.4       RTOS对STemWin多任务的支持

基本常见的RTOS都支持STemWin的多任务,移植起来也比较的简单,下面这些是官方提供好的移植。

 

Example

Hello world

Window application

ROM

GUI core

5.9 kB

43 kB

 

Fonts

1.8 kB

12.5 kB

 

Application

38 B

2.7 kB

 

Startup code

300 B

300 B

 

Library

0.1 kB

1.5 kB

 

Total

8.1 kB

60 kB

ROM

GUI core

62 B

5.2 kB

 

Application

40 B

 

Stack

272 B

1.4 kB

 

Total

334 B

6.6 kB

这个只是官方提供的基本数据,仅供大家参考。具体还要看实际应用。

1.3.6       STemWin当前支持的控件

由于emWin在不断的更新当中,这里是当前支持的大部分控件,但不是全部。

以前论坛上以及群里面的一些客户对STM32F103和407跑STemWin持怀疑态度,觉得跑不起来,或者说实时性不行,刷屏比较慢,这里我专门的做了一些测试。

1.4.1       刷色块

l  测试F4驱动RA8875的7寸800*480分辨率的屏。

优化底层的情况下,刷整个屏

 

 620 / 25 = 24.8倍,能差出这么多来,可见经过优化和没有优化的差距之大。由于RA8875有刷色块的指令,这里再用3.0寸的测试一下(3.0寸的没有专门的刷色块指令)。

l  测试F4驱动SPFD5420的3寸400*240分辨率的屏。

优化底层的情况下,刷整个屏

1.4.2       刷控件

l  测试F4驱动RA8875的7寸800*480分辨率的屏。

 这里刷一个如下图所示样子的控件,大小800*480

  

   有没有看到差距。

l  测试F4驱动SPFD5420的3寸400*240分辨率的屏。

现在用3.0的屏刷控件优化底层的情况下,刷整个控件

 

1.5  STemWin论坛

自从国内的uCGUI论坛关闭以后,这方面比较好的论坛就很少了,论坛对于STemWin的发展也很重要。针对STemWin,我们自己建立的论坛:http://bbs.armfly.com/thread.php?fid=12。有兴趣的可以在论坛跟大家探讨相关的应用。

SEGGER官方也有自己的emWin论坛,地址是:http://forum.segger.com/。

1.6  总结

关于STemWin的介绍就跟大家说这么多,更详细的可以上我们的论坛进一步讨论。还有一点要说明的就是SEGGER公司的所有软件都是收费的,收费标准看这里:http://www.segger.com/pricing.html。

 

转自:http://www.360doc.com/showweb/0/0/.aspx

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/202465.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月20日 上午7:04
下一篇 2026年3月20日 上午7:05


相关推荐

  • SENT协议

    SENT协议工作中用到了SENT协议的传感器,就专门研究的一下,以下内容主要来自于CANoe的帮助文档中的SENT协议的部分内容。概述SENT(SingleEdgeNibbleTransmission)协议是汽车电子中常用于传感器信号的一种数字信号接口,其有特定的协议,是单向通信,是汽车电子中一种低成本通信的实现方式硬件SENT协议常用于传感器信号,其基本引脚连接如下:…

    2022年6月29日
    71
  • Eclipse导入项目出现中文乱码解决方法

    Eclipse导入项目出现中文乱码解决方法Eclipse 导入项目出现中文乱码解决方法在使用 eclipse 导入课本的 java 文件或网上项目时会遇到中文乱码问题步骤一 1 Project Properties Resource Textfileenco Other UTF 8 然后点击 ApplyandClos 选择出现乱码的项目 File Properties Textfileenco Other UTF 8 然后点击 ApplyandClos 步骤二 Window Prefer

    2026年2月26日
    3
  • 接口性能测试方案分析

    接口性能测试方案分析概述性能测试按照不同视角 可以分为以下几类 a 用户视角的性能用户角度感受到的网站响应速度的快和慢 从用户在浏览器输入网址 打开应用 到整个页面呈现给用户的耗时 包含了用户端发送请求 服务端收到并执行请求 返回请求 客户端收到之后渲染的总时间 b 开发人员视角的性能包括系统吞吐量 并发处理能力 系统稳定性 响应延迟等 如果发现有不满足要求的地方 需要定位出问题所在 并给出解决方案 c 运维主要关注基础设施性能和资源利用率 如网络运营商带宽能力 服务器应急配置 数据中心网络架构 服务器

    2026年3月16日
    2
  • f1 score 代码_在pytorch 中计算精度、回归率、F1 score等指标的实例「建议收藏」

    f1 score 代码_在pytorch 中计算精度、回归率、F1 score等指标的实例「建议收藏」pytorch中训练完网络后,需要对学习的结果进行测试。官网上例程用的方法统统都是正确率,使用的是torch.eq()这个函数。但是为了更精细的评价结果,我们还需要计算其他各个指标。在把官网API翻了一遍之后发现并没有用于计算TP,TN,FP,FN的函数。。。在动了无数歪脑筋之后,心想pytorch完全支持numpy,那能不能直接进行判断,试了一下果然可以,上代码:#TPpredict和l…

    2022年10月14日
    4
  • 电脑版即梦生成的图片怎么导出没有水印?

    电脑版即梦生成的图片怎么导出没有水印?

    2026年3月12日
    5
  • JShell教程

    JShell教程什么是 JShellJShell 工具是一个命令行工具 通过提供 Java 编程语言元素的交互使用来促进探索性编程 JShell 是一个 REPL 读取 评估 打印循环 无论是学习 Java 语言还是探索陌生的代码 包括新的 JavaAPI 它都是理想的选择 典型的 Java 开发意味着编写一个完整的程序 然后对其进行编译 修复所有错误 运行它 找出问题所在 进行编辑和重复 使用 JShell 您可以一次输入一个程序元素 立即查看结果并进行相应调整 在开发过程中 可以将代码粘贴到 JShell 中 和 或将工作代码从 JSh

    2026年3月18日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号