emWin 5.22 (uCGUI) 图形用户接口移植实例——STM32
作者:Ach
日期:2013年 12月 29日
联系方式:ox000008@163.com
1. 概要
移植图形用户接口的好处是不言而喻的。本文图文并茂地介绍了一个 emWin 5.22(uCGUI)的
移植实例。文章具体分为 emWin简介,硬件平台简介,开发环境及项目简介,移植过程以及总结几
个部分。
2. emWin简介
emWin 是一种高效的而图形用户界面,是我们能够摆脱处理器和显示控制器而更专注于 GUI 的
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
。这里借用 STemWin的一幅图来说明 emWin的作用和结构。它通过 LCD及 GUI的配置来驱动
底层硬件,而应用程序又是通过调用 emWin来实现各种 GUI。5.22版的 emWin带有许多常用的显示
控制器的驱动(在参考手册 Display Driver 一章中有详细介绍),因此为我们移植带来了诸多方便。
emWin的更详细的内容可参照它的参考手册。
图 1. emWin在项目中的结构
3. 硬件平台简介
笔者使用的是一块以 STM32F103VET6为核心的 ARM开发板,没有外部的 SRAM及 Flash。显示
屏为 2.8” 320*240的彩色液晶屏,屏的驱动芯片为 ILI9341(emWin 5.22带有它的驱动)。屏与 CPU
的连接方式为该 ARM核心所特有的 FSMC_SRAM方式,访问 LCD内容时操作就如同读写 SRAM一样
方便。
如果你想使用其它硬件平台来移植 emWin,本文亦有一定的参考价值。希望本文能助你成功移
植 emWin。
图 2. 硬件平台
4. 开发环境简介
笔者所使用的开发软件为MDK-ARM 4.70。项目
模板
个人简介word模板免费下载关于员工迟到处罚通告模板康奈尔office模板下载康奈尔 笔记本 模板 下载软件方案模板免费下载
使用的是 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 个文件夹,分别为 RTOS 和 Standalone,RTOS 是带操作系统的。我们打开
Standalone,其中有 6个文件夹,分别为 Config、Demo、EWARM、MDK-ARM、TrueSTUDIO及 User,
具体的不一一介绍了。打开MDK-ARM,我们要的工程文件就在其中了。
打开工程,先点击如图左边红圈处编译一下,工程应该是没有错误的。然后根据你所使用的硬
件开发环境点击右边红圈处配置一下项目。
点击 Device标签设置器件,我应该选 STM32F103VE。
点击 Output标签,勾选左边红圈处,编译后会输出 HEX文件,当然你也可以改一下右边红圈内
的名字。
点击 Debug标签,设置调试信息,选择你的调试工具即可,不详细介绍了。
点击 Utilities标签,我的设置如图。
为了可以直接在项目中向开发板烧录程序,我们点 Settings 设置一下,我的设置如下图,其中
添加了如图的片上 Flash编程算法。
点击 OK设置完毕。
5.2 程序修改
准备工作已经完成,接着要根据模板进行修改了。看一下 Appli中的 main主程序,如下。先看
“BSP_Init();”,这是开发板的初始化程序,我们先把它注释掉,然后在后面加上下面的语句,因为
需要用到 CRC模块。
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_CRC, ENABLE);
接着我们修改 LCD和 GUI配置文件。
先是 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_Config 和
LCD_X_DisplayDriver。
LCD_X_Config,驱动为 GUIDRV_FLEXCOLOR,颜色为 16位 GUICC_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,&PortAPI,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!同时欢迎交流指正。
完成时间 2013年 12月 30日
Ach#