要使emWin在特定的硬件平台上运行,需要为emWin提供与底层硬件操作相关的函数接口,主要为内存管理接口、液晶驱动接口和触摸屏接口。
本章以配套例程“FreeRTOS_STemWIN544_移植模版”为例,对emWin的执行过程和移植步骤进行解构,阅读时请打开该工程配套学习。
本章第1、2、3小节适用于野火STM32全系列开发板,第4、5、6小节适用于显示接口为8080并口(mini、指南者、霸道、霸天虎)的开发板, 适用于RGB接口开发板(F4F7H7挑战者、H743H750 Pro)的移植过程单独放到下一章。
emWin的初始化
在移植emWin之前,我们需要了解它的初始化过程以及它依赖的硬件接口。
相信读者已经通过上一章的emWin仿真教程章节知道,在使用emWin前,都要先调用GUI_Init函数初始化emWin运行所需要的环境, 在这个GUI_Init函数里,调用了emWin底层的配置函数,见图 emWin初始化流程 。 它按顺序分别调用了GUI_X_Config、LCD_X_Config及LCD_X_DisplayDriver函数,完成了存储器分配、屏幕类型配置及初始化液晶驱动的工作。 这些函数在前面的emWin仿真章节已经简要介绍过,在Win32仿真环境下的这些函数,已由Segger官方配置过,我们无需修改也能正常运行, 而在嵌入式平台上,就必须修改这几个函数,以适应特定平台的需求。
除了上述函数的修改,还有一些emWin配置文件和操作系统接口相关文件的修改,综合各文件和配置的修改情况,可整理出移植emWin所需要的配置:
配置系统功能
在emWin启动前需要对其功能进行适当的配置,它们的代码位于GUIConf.h文件中,见 代码清单:8080并口-1 。
#ifndef GUICONF_H
#define GUICONF_H
/*********************************************************************
*
* Multi layer/display support
*/
#define GUI_NUM_LAYERS 2 // Maximum number of available (1)
layers
/*********************************************************************
*
* Multi tasking support
*/
#ifdef OS_SUPPORT
#define GUI_OS (1) // Compile with multitasking (2)
support
#else
#define GUI_OS (0)
#endif
/*********************************************************************
*
* Configuration of touch support
*/
#ifndef GUI_SUPPORT_TOUCH
#define GUI_SUPPORT_TOUCH (1) // Support touchscreen (3)
#endif
/*********************************************************************
*
* Default font
*/
#define GUI_DEFAULT_FONT &GUI_Font6x8 (4)
/*********************************************************************
*
* Configuration of available packages
*/
#define GUI_SUPPORT_MOUSE (1) /* Support a mouse */ (5)
#define GUI_WINSUPPORT (1) /* Use window manager */ (6)
#define GUI_SUPPORT_MEMDEV (1) /* Memory device package (7)
available */
#define GUI_SUPPORT_DEVICES (1) /* Enable use of device (8)
pointers */
/*********************************************************************
*
* External memory