前言
瑞佑科技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文章
16448瀏覽量
179477 -
lcd
+關注
關注
34文章
4438瀏覽量
168398 -
TFT
+關注
關注
10文章
386瀏覽量
111308 -
單片機
+關注
關注
0文章
218瀏覽量
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)
評論