OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 27867|回复: 33

emWin 5.22 (uCGUI) 图形用户接口移植实例——STM32

[复制链接]

1

主题

13

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
200
金钱
200
注册时间
2013-12-30
在线时间
2 小时
发表于 2013-12-30 20:09:33 | 显示全部楼层 |阅读模式

emWin 5.22 (uCGUI) 图形用户接口移植实例——STM32

作者:Ach

日期:20131229

联系方式:ox000008@163.com

 

1.      概要

移植图形用户接口的好处是不言而喻的。本文图文并茂地介绍了一个emWin 5.22uCGUI)的移植实例。文章具体分为emWin简介,硬件平台简介,开发环境及项目简介,移植过程以及总结几个部分。

 

2.      emWin简介

emWin是一种高效的而图形用户界面,是我们能够摆脱处理器和显示控制器而更专注于GUI的设计。这里借用STemWin的一幅图来说明emWin的作用和结构。它通过LCDGUI的配置来驱动底层硬件,而应用程序又是通过调用emWin来实现各种GUI5.22版的emWin带有许多常用的显示控制器的驱动(在参考手册Display Driver一章中有详细介绍),因此为我们移植带来了诸多方便。emWin的更详细的内容可参照它的参考手册。

1. emWin在项目中的结构

 

3.      硬件平台简介

笔者使用的是一块以STM32F103VET6为核心的ARM开发板,没有外部的SRAMFlash。显示屏为2.8” 320*240的彩色液晶屏,屏的驱动芯片为ILI9341emWin 5.22带有它的驱动)。屏与CPU的连接方式为该ARM核心所特有的FSMC_SRAM方式,访问LCD内容时操作就如同读写SRAM一样方便。

如果你想使用其它硬件平台来移植emWin,本文亦有一定的参考价值。希望本文能助你成功移植emWin


2. 硬件平台

 

4.      开发环境简介

笔者所使用的开发软件为MDK-ARM 4.70。项目模板使用的是STemWin库中的(可从ST官方下载)。


3. 项目截图

如图,项目下面有3个文件夹,其中Appli存放的是应用层的程序,第二个文件夹就如文件名,存放了emWin5.22所有部件,第三个文件夹存放了一些STM32及其它的库。具体见附件。

 

5.      移植过程

有了MDK-ARM以及STemWin库,整个移植过程应该比较简单。STemWin中有4个文件夹,第一个可以不用看了,Libraries中包含所有需要的库(其中包含emWin5.22),Project中存放工程文件,Utilities中是一些应用文件。为了保持代码及工程结构的格式统一,我们尽量套用原有的格式。下面开始一步步的移植工作。

5.1 项目配置

打开Project文件夹,看到众多STM32的开发板文件夹。如果你有相应的板子,就不用修改直接用。我使用的是STM32F103核心的板子,因此我选了STM3210E-EVAL为模板,取名TEST(自取)。打开该文件夹,里面有2个文件夹,分别为RTOSStandaloneRTOS是带操作系统的。我们打开Standalone,其中有6个文件夹,分别为ConfigDemoEWARMMDK-ARMTrueSTUDIOUser,具体的不一一介绍了。打开MDK-ARM,我们要的工程文件就在其中了。

打开工程,先点击如图左边红圈处编译一下,工程应该是没有错误的。然后根据你所使用的硬件开发环境点击右边红圈处配置一下项目。


    点击Device标签设置器件,我应该选STM32F103VE

点击Output标签,勾选左边红圈处,编译后会输出HEX文件,当然你也可以改一下右边红圈内的名字。


    点击Debug标签,设置调试信息,选择你的调试工具即可,不详细介绍了。

点击Utilities标签,我的设置如图。

为了可以直接在项目中向开发板烧录程序,我们点Settings设置一下,我的设置如下图,其中添加了如图的片上Flash编程算法。

点击OK设置完毕。

 

5.2 程序修改

准备工作已经完成,接着要根据模板进行修改了。看一下Appli中的main主程序,如下。先看“BSP_Init();”,这是开发板的初始化程序,我们先把它注释掉,然后在后面加上下面的语句,因为需要用到CRC模块。

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_CRC, ENABLE); 

 

接着我们修改LCDGUI配置文件。

先是LCDConf_stm3210e_eval.c,修改显示屏大小,我的不用改了。

#define XSIZE_PHYS  240

#define YSIZE_PHYS  320

修改接口寄存器地址,我的如下。这里说明一下,我的是用FSMC_SRAM接口的,和官方开发板类似。如果你用得是其它接口,在emWin参考手册Display drivers -> CPU / Display controller interface中有对硬件接口的详细叙述,它吧接口分为直接和间接两种,我们用的嵌入式系统一般是间接的接口。查找是否有我们所使用的显示芯片的驱动,然后参考手册进行相应的操作。我使用的ILI9341驱动在GUIDRV_FLEXCOLOR中有。

// COG interface register addr.

//

#define LCD_BASE           ((uint32_t)(0x60000000 | 0x00000000))

#define LCD_REG_ADDRESS   (*(volatile U16*)LCD_BASE)

#define LCD_DATA_ADDRESS  (*(volatile U16*)(LCD_BASE + 0x20000))

 

Local functions那一段我就不用改了。Public functions中有两个接口函数LCD_X_ConfigLCD_X_DisplayDriver

LCD_X_Config,驱动为GUIDRV_FLEXCOLOR,颜色为16GUICC_565转换方式。

pDevice = GUI_DEVICE_CreateAndLink(GUIDRV_FLEXCOLOR, GUICC_565, 0, 0);

 

Set controller and operation mode,将一些显示驱动用的函数传递给PortAPI。再通过函数GUIDRV_FlexColor_SetFunc进行设置,查看参考手册GUIDRV_FlexColor段,ILI9341 驱动在GUIDRV_FLEXCOLOR_F66709中,接口形式为GUIDRV_FLEXCOLOR_M16C0B16

PortAPI.pfWrite16_A0  = LcdWriteReg;

PortAPI.pfWrite16_A1  = LcdWriteData;

PortAPI.pfWriteM16_A1 = LcdWriteDataMultiple;

PortAPI.pfReadM16_A1  = LcdReadDataMultiple;

GUIDRV_FlexColor_SetFunc(pDevice,&ortAPI,GUIDRV_FLEXCOLOR_F66709,GUIDRV_FLEXCOLOR_M16C0B16);

最后一个函数LCD_X_DisplayDriver,把“STM3210E_LCD_Init();”改成你的初始化程序即可,当然,在前面要把需要的头文件包含进去。至此,我们把LCD配置改完了。

 

GUIConf_stm3210e_eval.c,程序主要是为GUI分配可以的内存。对于这里,我只能理解给它分配足够大的内存可以让现实更流畅。由于我板上的内存有限,总共64KB,后面GUIDEMO还要用内存,所以分配16KB给它。

// Define the available number of bytes available for the GUI

//

#define GUI_NUMBYTES  (1024) *  16   // x KByte

 

接着,修改Appli中的GUIDEMO.h文件,看Configuration of modules to be used段,配置我们要运行的模块。我们先试前面3个模块,其它都关掉(设为0)。内存小的话不要开太多了,否则内存不够用。

 

至此,程序已经基本修改完毕,重新编译程序,修改错误之处直至编译通过,下载程序到开发板。

 

演示画面已经显示,但是,画面为什么停在那里呢?我们再回来看main中的“BSP_Init();”函数。它里面包含了一个非常重要的东西,我们在函数名上点击右键,选择“Go To Definition Of ‘BSP_Init’”查看该函数的定义。

其中包含了“SysTick_Config(SystemCoreClock / 1000);”,即对SysTick的配置,它就像人的心跳一样,是系统运行的钟摆。它被配置为1ms产生一个中断。

stm32xxx.it中,有一个“SysTick_Handler”中断处理函数,“OS_TimeMS ++;”即实现了emWin的运行。我们把不需要的都注释掉,然后编译工程,下载到开发板。至此,emWin已经能够在目标板上运行。






6.      总结

移植emWin只是一个开始,还有更多的奥秘等待我们去探索,相信只要我们能够努力,一定能开发出漂亮的界面。

 

注:文中的项目较大,如有需要,邮me!同时欢迎交流指正。

 

完成时间20131230

Ach#


代码链接:
http://yun.baidu.com/s/1hqeaJ2k
若链接失效,邮箱联系。





补充内容 (2016-11-23 13:38): 程序链接 链接:http://pan.baidu.com/s/1geRMeXX 密码:zers 补充内容 (2016-11-23 13:40): 对于没有及时回复的深感抱歉,很久没来论坛,有急事可以发我邮箱,一般几天会看一下,,, 支持论坛 +++

emWin522(uCGUI)图形用户接口移植详细实例_STM32_2013_12_30.pdf

1.28 MB, 下载次数: 6793

宁静致远。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2013-12-30 22:38:32 | 显示全部楼层
楼主,把图片加上吧!
图片一个都没。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

13

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
200
金钱
200
注册时间
2013-12-30
在线时间
2 小时
 楼主| 发表于 2013-12-31 18:53:38 | 显示全部楼层
原子侠,第一次发帖,包含。我试试怎么加图片。。。
宁静致远。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2013-12-31 23:32:24 | 显示全部楼层
回复【3楼】ox000008:
---------------------------------
貌似你搞懂了?
呵呵。
可否上传代码?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

13

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
200
金钱
200
注册时间
2013-12-30
在线时间
2 小时
 楼主| 发表于 2014-1-2 19:37:33 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
网速慢得要死,图片传了3张,还是看附件里的吧。代码链接已上传。

貌似现在人都很懒,没人回帖。
宁静致远。
回复 支持 反对

使用道具 举报

20

主题

187

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
288
金钱
288
注册时间
2011-12-14
在线时间
0 小时
发表于 2014-1-2 20:49:45 | 显示全部楼层
才看到,好帖子,继续啊!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2014-1-2 23:01:23 | 显示全部楼层
回复【5楼】ox000008:
---------------------------------
呵呵,帮顶.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2013-9-3
在线时间
8 小时
发表于 2014-1-3 17:02:27 | 显示全部楼层
楼主真是好人,正在为移植UCGUI摸不到头绪!
回复 支持 反对

使用道具 举报

1

主题

13

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
200
金钱
200
注册时间
2013-12-30
在线时间
2 小时
 楼主| 发表于 2014-1-4 16:05:42 | 显示全部楼层
回复【8楼】 andayjon :
---------------------------------
过奖了,移植成功了,觉得可能对别人有用,独乐乐不如众乐乐。
其实很多时候我们都是站在前人的肩膀上,呵呵。
最近想做一个简单的示波器,在网上找了下,看到了下面的帖子
http://www.openedv.com/posts/list/7393.htm
非常不错,稍微改了一下,已经能跑起来了。上个图分享一下。



宁静致远。
回复 支持 反对

使用道具 举报

27

主题

774

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1473
金钱
1473
注册时间
2013-4-12
在线时间
77 小时
发表于 2014-1-4 23:34:44 | 显示全部楼层
mark
回复 支持 反对

使用道具 举报

6

主题

32

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
227
金钱
227
注册时间
2013-8-18
在线时间
41 小时
发表于 2014-1-5 21:13:33 | 显示全部楼层
回复【楼主位】ox000008:
---------------------------------
顶一个!!!
给我一块二向箔,清理用~
回复 支持 反对

使用道具 举报

6

主题

85

帖子

0

精华

高级会员

Rank: 4

积分
763
金钱
763
注册时间
2013-4-23
在线时间
119 小时
发表于 2014-1-6 23:40:55 | 显示全部楼层
终于在这出现了 !膜拜 !  必须顶 。。。资料宝贵。感谢楼主
MJM_天行健,君子以自强不息;地势坤,君子以厚德载物;
回复 支持 反对

使用道具 举报

2

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
113
金钱
113
注册时间
2013-9-20
在线时间
12 小时
发表于 2014-1-9 22:12:14 | 显示全部楼层
回复【9楼】ox000008:
---------------------------------
想要你移植的代码,可否发一份给我,505401935@qq.com
回复 支持 反对

使用道具 举报

1

主题

13

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
200
金钱
200
注册时间
2013-12-30
在线时间
2 小时
 楼主| 发表于 2014-1-10 18:38:00 | 显示全部楼层
回复【13楼】jarek008:
---------------------------------
已发送。
宁静致远。
回复 支持 反对

使用道具 举报

19

主题

90

帖子

1

精华

高级会员

Rank: 4

积分
543
金钱
543
注册时间
2012-5-13
在线时间
40 小时
发表于 2014-1-10 20:36:22 | 显示全部楼层
回复【9楼】ox000008:
---------------------------------
不错,顶一个,学习一下。我一直为学这个这个困扰呢.楼主你的QQ,加一下
回复 支持 反对

使用道具 举报

2

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
113
金钱
113
注册时间
2013-9-20
在线时间
12 小时
发表于 2014-1-11 21:29:13 | 显示全部楼层
回复【14楼】ox000008:
---------------------------------
哦 谢谢 不过我说的是我想要你移植示波器的代码,我移植的不成功
回复 支持 反对

使用道具 举报

头像被屏蔽

38

主题

382

帖子

0

精华

高级会员

Rank: 4

积分
596
金钱
596
注册时间
2012-12-5
在线时间
19 小时
发表于 2014-1-12 00:49:56 | 显示全部楼层
我想问一下,同样的STM32F103ZET跑EMWIN和UCGUI完成一样的GUI实现,是不是UCGUI需要的内存少一些,跑的速度也更快一些呢? 还是说和EMWIN一样的?
回复 支持 反对

使用道具 举报

53

主题

608

帖子

0

精华

高级会员

Rank: 4

积分
890
金钱
890
注册时间
2013-3-29
在线时间
18 小时
发表于 2014-1-12 12:08:40 | 显示全部楼层
需要学习
回复 支持 反对

使用道具 举报

1

主题

13

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
200
金钱
200
注册时间
2013-12-30
在线时间
2 小时
 楼主| 发表于 2014-1-12 13:09:07 | 显示全部楼层
回复【17楼】toddchen:

我想问一下,同样的STM32F103ZET跑EMWIN和UCGUI完成一样的GUI实现,是不是UCGUI需要的内存少一些,跑的速度也更快一些呢? 还是说和EMWIN一样的?

---------------------------------
EMWIN和UCGUI到底是什么关系,我也没搞明白。速度和内存用量要看哪个版本的,具体的还要亲自去测试。
宁静致远。
回复 支持 反对

使用道具 举报

12

主题

216

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
313
金钱
313
注册时间
2011-4-7
在线时间
3 小时
发表于 2014-1-13 23:29:53 | 显示全部楼层
学习!
回复 支持 反对

使用道具 举报

7

主题

57

帖子

0

精华

初级会员

Rank: 2

积分
144
金钱
144
注册时间
2012-11-13
在线时间
11 小时
发表于 2014-1-17 10:55:40 | 显示全部楼层
学习,好资料
回复 支持 反对

使用道具 举报

3

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2014-6-22
在线时间
3 小时
发表于 2015-6-2 09:59:58 | 显示全部楼层
学习,谢谢。。。
回复 支持 反对

使用道具 举报

19

主题

107

帖子

0

精华

初级会员

Rank: 2

积分
195
金钱
195
注册时间
2015-3-5
在线时间
44 小时
发表于 2015-6-2 10:42:46 | 显示全部楼层
mark一下
回复 支持 反对

使用道具 举报

19

主题

102

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
204
金钱
204
注册时间
2015-6-19
在线时间
1 小时
发表于 2015-6-19 22:02:01 | 显示全部楼层
回复【14楼】ox000008:
---------------------------------
  最近搞emwin一直 能否借鉴一下您的代码?1036000487@qqcom!万分感谢!
回复 支持 反对

使用道具 举报

1

主题

13

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2015-7-2
在线时间
0 小时
发表于 2015-7-2 16:41:28 | 显示全部楼层
好,不错,刚刚开始学习
回复 支持 反对

使用道具 举报

36

主题

195

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
313
金钱
313
注册时间
2014-10-27
在线时间
34 小时
发表于 2015-7-20 20:28:27 | 显示全部楼层
mark,向楼主学习!
回复 支持 反对

使用道具 举报

1

主题

13

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2015-7-2
在线时间
0 小时
发表于 2015-9-2 11:18:23 | 显示全部楼层
不错 不错,值得学习
回复 支持 反对

使用道具 举报

0

主题

0

帖子

0

精华

新手入门

积分
4
金钱
4
注册时间
2020-6-17
在线时间
0 小时
发表于 2015-10-16 15:27:37 | 显示全部楼层
mark  !!!
回复 支持 反对

使用道具 举报

5

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
115
金钱
115
注册时间
2016-6-3
在线时间
25 小时
发表于 2016-7-12 16:56:24 | 显示全部楼层
【能接emWin的SPI串口屏】
GLCD功能类似于SPI串口屏,只是SPI接口通信更快速,以至能作为emWin(第三方界面软件库)的图形显示屏,弥补emWin使用字库/图片麻烦以及刷屏慢的缺点,这样emWin做界面就更精美、便捷!
emWin界面软件库是运行在用户CPU中的;GLCD负责储存字库和图片,以及接收由emWin发出的绘图指令,并且执行这些绘图指令以显示文字、图片、2D图形等,绘图指令代替像素操作可大大减轻用户CPU的负担;GLCD还管理触摸屏、鼠标、键盘、蜂鸣器、RTC时钟等外设。
更多介绍请看:www.neqee.com
回复 支持 反对

使用道具 举报

0

主题

7

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2014-11-11
在线时间
6 小时
发表于 2016-10-19 11:49:54 | 显示全部楼层
不错,学习一下
回复 支持 反对

使用道具 举报

42

主题

145

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
353
金钱
353
注册时间
2016-7-17
在线时间
59 小时
发表于 2016-10-21 23:13:04 | 显示全部楼层
有,我还没学到
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2016-10-16
在线时间
12 小时
发表于 2016-11-1 13:15:46 | 显示全部楼层
想要你移植的代码,可否发一份给我,252050705@qq.com
回复 支持 反对

使用道具 举报

1

主题

13

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
200
金钱
200
注册时间
2013-12-30
在线时间
2 小时
 楼主| 发表于 2016-11-23 13:36:34 | 显示全部楼层
boyzhou 发表于 2016-11-1 13:15
想要你移植的代码,可否发一份给我,

链接:http://pan.baidu.com/s/1geRMeXX 密码:zers
宁静致远。
回复 支持 反对

使用道具 举报

1

主题

27

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1275
金钱
1275
注册时间
2015-11-21
在线时间
527 小时
发表于 2017-12-2 15:50:26 | 显示全部楼层
学习学习,支持
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 08:48

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表