前言
瑞佑科技RA8889ML3N是一款功能强大的彩色液晶显示控制器,内置128Mb SDRAM, 支持1366x2048高分辨率液晶显示屏,单片机MCU端支持8080/6800 8/16-bit接口,以及¾线SPI 或IIC接口。 RA8889支持多图层应用、画几何图形引擎、2D图形加速引擎(BTE)、画中画(PIP 实现弹窗利器)、支持BMP、JPEG格式图片显示,并内置了视频解码功能。
如何将RA8889强大的显示控制功能移植到emWin平台,以求做出流畅、炫酷的UI操作界面,接下来就说明我们如何将RA8889的应用驱动移植到emWin GUI Library里,实现在emWin平台上使用RA8889内置的液晶显示控制功能。
以下范例是基于使用瑞福科技的RA8889 EV Board开发板,使用STM32F103VET6 MCU,和使用Keil MDK 编译。
![pYYBAGSIJE2AcfvcAAbZj9plRw4528.png](https://file.elecfans.com/web2/M00/AC/76/pYYBAGSIJE2AcfvcAAbZj9plRw4528.png)
详细步骤如下:
一、 获得 emWin Graphic Library
1. 安装 Keil MDK,在 C:Keil_v5ARMSeggeremWin 路径下获得 emWin library
![pYYBAGSIJ3CAPjb_AAAgk1iXmKc385.png](https://file.elecfans.com/web2/M00/AC/7C/pYYBAGSIJ3CAPjb_AAAgk1iXmKc385.png)
2. 在 C:Keil_v5ARMSeggeremWinDoc 获得 emWin User&Reference Guide
![pYYBAGSIKTSAIMejAAAk8fq6RTc121.png](https://file.elecfans.com/web2/M00/AC/7F/pYYBAGSIKTSAIMejAAAk8fq6RTc121.png)
3. 与瑞佑科技的深圳分公司(深圳瑞福科技-Q2851189731)联络,以获得最新版的RA8889_API_Demo_Vxx范例。
二、开始移植
RA8889_API_emwin546_stm32f103_8080IF 范例是由 RA8889_API_Demo_Vxx 加入emWin Library 产生的,以下修改说明请参考范例程序项目。
1. 首先新增 3 个文件夹 emwin_config, emwin_inc, emwin_lib
![pYYBAGSIKsCAIFc-AAArmys2Pg8177.png](https://file.elecfans.com/web2/M00/AC/7F/pYYBAGSIKsCAIFc-AAArmys2Pg8177.png)
1) 在 C:Keil_v5ARMSeggeremWinSampleConfig,复制 GUIConf.c 、GUIConf.h 、 LCDConf.c 、 LCDConf.h 4 个文件到emwin_config 文件夹内。
(2) 在 C:Keil_v5ARMSeggeremWinSampleDisplayDriver,复制GUIDRV_Template.c 文件到 emwin_config 文件夹内。
(3) 在 C:Keil_v5ARMSeggeremWinSampleGUI_X,复制 GUI_X.c 文件到emwin_config 文件夹内。
(4) 在 C:Keil_v5ARMSeggeremWinInclude,复制所有的.h 文件到 emwin_inc 文件夹内。
(5) 在 C:Keil_v5ARMSeggeremWinLib,复制 GUI_CM3.lib 文件到 emwin_lib 文件夹内。 (由于我们的 STM32F103 是 CM3核心,所以选用 CM3)。
(6) 在 C:Keil_v5ARMSeggeremWinSampleApplicationGUIDemo 内,复制全部的文件夹到 emwin_demo 文件夹内。
2. 打开 Keil 项目,在 Manage Project Items 内建立 emwin_config 、 emwin_lib 、emwin_demo 3 个 Groups 并加入文件,如下图。
![pYYBAGSIK7-AIQSvAADVtLQcs2c916.png](https://file.elecfans.com/web2/M00/AC/80/pYYBAGSIK7-AIQSvAADVtLQcs2c916.png)
在 Option for Target 里面的 Include Paths 新增 3 个 include paths 如下图。
![pYYBAGSILmaAH2YwAABy55NdajU943.png](https://file.elecfans.com/web2/M00/AC/81/pYYBAGSILmaAH2YwAABy55NdajU943.png)
3. 以上设定完后,我们编译时应该会产生以下错误:
Error: L6218E: Undefined symbol GUI_X_GetTaskId (referred from gui_task.o).
Error: L6218E: Undefined symbol GUI_X_InitOS (referred from gui_task.o).
Error: L6218E: Undefined symbol GUI_X_Lock (referred from gui_task.o).
Error: L6218E: Undefined symbol GUI_X_Unlock (referred from gui_task.o).
由于本范例没使用 OS 操作系统,所以我们先忽略这个问题,为了让编译可以正常进行,我们在 GUI_X.c 内加入这几个函数,如下图。
![poYBAGSILyWAGAzxAABove29h4Y418.png](https://file.elecfans.com/web2/M00/AC/08/poYBAGSILyWAGAzxAABove29h4Y418.png)
4. emWin GUI 时基源
emWin GUI 需要一个时基源并须1ms递增,即OS_TimeMS变数在GUI_X.c文件内声明,MCU必须先提供一个1ms的timer tick,通常在Cortex-M由SysTick的设定由SysTick_Handler{}中断函数去递增变量来实现,而本文范例采用MCU TIMER中断来提供1ms的tick,在stm32f10x_it.c内TIM3_IRQHandler()中断函数实现tick递增。
5 分配内存给emWin系统
在GUIConf.c文件内设定,内存大小会影响效能,须根据MCU的内存大小去配置。
![pYYBAGSIMyuAf7KoAABlgKPxVJg593.png](https://file.elecfans.com/web2/M00/AC/82/pYYBAGSIMyuAf7KoAABlgKPxVJg593.png)
6. GUIDRV_Template.c修改
使用GUIDRV_Template.c 作为新增一个GUI设备的驱动文件,emWin实现屏幕的驱动主要在于写一个点与读一个点,我们必须修改static void _SetPixelIndex(GUI_DEVICE * pDevice, int x, int y, LCD_PIXELINDEX PixelIndex)与static LCD_PIXELINDEX_GetPixelIndex(GUI_DEVICE * pDevice, int x, int y)两个主要函数,如下图。
![poYBAGSIM3KAN_96AABtZsIZGT0066.png](https://file.elecfans.com/web2/M00/AC/0A/poYBAGSIM3KAN_96AABtZsIZGT0066.png)
![pYYBAGSIM6uAaOS5AAByC81hfcY658.png](https://file.elecfans.com/web2/M00/AC/82/pYYBAGSIM6uAaOS5AAByC81hfcY658.png)
引入的 putPixel()与 getPixel()函数来自 RA8889_API.h,在这个范例选用 16bit RGB565 或24bit RGB888 数据格式,参考 UserDef.h 选用如下设定:
支持 16bit RGB565 (使用 emWin GUICC_M565)
#define Parallel_8080
#define MCU_16bit_ColorDepth_16bpp
支持 24bit RGB888 (使用 emWin GUICC_M888)
#define Parallel_8080
#define MCU_16bit_ColorDepth_24bpp_Mode_2
另外为了优化填充效率, 在 GUIDRV_Template.c 文件新增定义 Add2D_Optimize, 使用 RA8889 内建 2D 绘图加速功能并增加到_FillRect()、 _DrawHLine()、 _DrawVLine()函数内, 如下图:
![poYBAGSINDmATDVxAABTjoPsGLU011.png](https://file.elecfans.com/web2/M00/AC/0A/poYBAGSINDmATDVxAABTjoPsGLU011.png)
![pYYBAGSINF-AMRTxAAA9Zmfy1sk605.png](https://file.elecfans.com/web2/M00/AC/83/pYYBAGSINF-AMRTxAAA9Zmfy1sk605.png)
7. 修改LCDconf.c 如下图:
![poYBAGSINMmAKcDUAACCjxtLFjY015.png](https://file.elecfans.com/web2/M00/AC/0A/poYBAGSINMmAKcDUAACCjxtLFjY015.png)
上述设定完成后,在 main.c 加入以下内容,开始运行 GUIDEMO。
![pYYBAGSINQuAVPe5AAAtGtXVb2E160.png](https://file.elecfans.com/web2/M00/AC/83/pYYBAGSINQuAVPe5AAAtGtXVb2E160.png)
运行效果图如下:
![poYBAGSINZqAPY8fAAiDOb51AY0622.png](https://file.elecfans.com/web2/M00/AC/0B/poYBAGSINZqAPY8fAAiDOb51AY0622.png)
三、在emWin平台上移植RA8889显示控制功能的优势
1)显示效果优化
利用RA8889内建DRAM与BTE功能取代emWin Memory Device功能,可实现刷新显示时不闪屏,具体如何应用,可与瑞福科技联系-Q2851189731;
2) 多缓存应用
利用RA8889内建的128Mbit DRAM ,分配内存给emWin在RA8889的显存上操作,即可实现:缓存1用于液晶屏的显示(即显示区)、缓存2 用于emWin的读写操作内存、另外可分配缓存3、缓存4…等等,比如缓存3可用于显示挂在RA8889上的Flash的图片,当需要显示时,即可用BTE的复制粘贴到显示区显示,比如缓存4用作视频的缓存纽带,可完美实现emWin窗口+视频播放的显示搭配效果;以上实现具体原理,以及代码例程,可与瑞福科技联系Q2851189731威廉希尔官方网站 交流。
总结:在emWin平台上配合使用瑞佑科技的液晶显示控制器芯片RA8889ML3N,即使低端的MCU,也可驱动高分辨率(1366*2048)液晶显示屏, 可做出流畅、炫酷的UI操作界面。
-
控制器
+关注
关注
112文章
16361浏览量
178036 -
lcd
+关注
关注
34文章
4426浏览量
167485 -
TFT
+关注
关注
10文章
385浏览量
111092 -
单片机
+关注
关注
0文章
216浏览量
16658
发布评论请先 登录
相关推荐
![](https://file.elecfans.com/web2/M00/6A/6E/pYYBAGMj4iWAaTEHAANei7npvaY833.jpg)
彩色液晶TFT-LCD显示控制芯片RA8889ML3N功能演示#寻找100+国产半导体厂家
模仿RA8875/RA8876做个图形LCD控制器,STM32跑emWin接VGA显示器测试OK
TFT-LCD液晶显示控制器RA887X系列_工业级_抗干扰能力强
RA8889ML3N-电路参考,一款带AVI视频硬解的TFT-LCD显示控制芯片
基于CPLD的TFT-LCD控制器的设计
![基于CPLD的<b class='flag-5'>TFT-LCD</b><b class='flag-5'>控制器</b>的设计](https://file.elecfans.com/web2/M00/49/40/pYYBAGKhtEGAFF1hAAASI4pgPQM963.jpg)
基于Xilinx FPGA SOPC的TFT-LCD 控制器设计与实现
![基于Xilinx FPGA SOPC的<b class='flag-5'>TFT-LCD</b> <b class='flag-5'>控制器</b>设计与实现](https://file1.elecfans.com//web2/M00/A6/EE/wKgZomUMQVWAWy3SAAAqZg-3_70978.jpg)
TFT LCD文字图形控制器RA8873ML4N规格书
基于单片机的TFT-LCD控制芯片RA8889ML3N功能介绍
![基于单片机的<b class='flag-5'>TFT-LCD</b><b class='flag-5'>控制</b>芯片<b class='flag-5'>RA8889ML3N</b><b class='flag-5'>功能</b>介绍](https://file.elecfans.com/web2/M00/6D/19/pYYBAGMxXw2AfruBAAZ5ExoHjEg269.png)
评论