目录

一、STemWin的文件结构

二、STemWin的移植步骤

三、STemWin的LCD驱动移植

四、STemWin的触摸屏驱动移植

五、补充


STM32芯片为:STM32F407VGT6

STemWin的版本为:5.44

一、STemWin的文件结构

找到ST官方的emWin的方法:一般在HAL库文件中的 Middlewares文件夹->ST文件夹中

  • Config: 包含GUI的一些配置以及GUI的一些底层的实现(例如:读点写点,这里需要将自己的LCD与触摸屏的驱动函数移植进来)
  • Documentation:有关STemWin的帮助文档
  • inc:有关STemWin的头文件
  • Lib:STemWin的对应静态库文件(有关库文件的命名规则,则放在Release_Notes.html中
  • OS:有关STemWin的心跳时钟的一些文件,带系统或者不带操作系统(带系统的情况下用OS中的不带系统的文件也可以)
  • Simulation:电脑端的仿真软件
  • Software:关于STemWin的一些实用软件,比如图片转成对应显示数组,汉字的取模,字库的生成等使用功能

二、STemWin的移植步骤

在自己的工程目录创建好对应的文件夹,接下来就复制对应需要的文件了。

1、首先是Config文件夹:一般选用GUIConf    GUIDRV_Template    LCDConf_FlexColor_Template

2、inc文件夹全部放入自己工程文件夹下

3、Lib文件夹:根据需求选用对应的静态库文件

  • 静态库文件的命名格式:

举例:STemWin_CM4_OS_wc16_ot_ARGB.a

cm4:cortexM4内核、OS:带操作系统、wc16:Wchar_t type是16位、ot:高速优化、ARGB: 支持argb

注:我这边的工程选的是STemWin_CM4_wc32.a(带操作系统的情况下,选用不带操作系统的库文件也没有太大关系)

4、OS文件夹:一般选择GUI_X.c就行了

5、编译路径的修改,库文件的添加,进行编译改错

这里提醒一下,Truestudio中添加.a文件不能直接在路径中添加,需要在选项Build-》C-Link-》Miscellaneous中添加。具体请查看:Truestudio链接静态库文件的方法

三、STemWin的LCD驱动移植

注意:使用STemWin需要使能CRC时钟。

1、Config文件夹:

  • GUIConf.c文件(这里可以修改有自己分配STemWin的内存空间,使用默认的也可以)
void GUI_X_Config(void) {//// 32 bit aligned memory area//static U32 aMemory[GUI_NUMBYTES / 4];//// Assign memory to emWin//GUI_ALLOC_AssignMemory(aMemory, GUI_NUMBYTES);GUI_ALLOC_SetAvBlockSize(GUI_BLOCKSIZE);//// Set default font//GUI_SetDefaultFont(GUI_FONT_6X8);
}
  • GUIDRV_Template.c文件:根据自己的LCD驱动函数,在对应位置处,添加对应的驱动功能。
//写点
static void _SetPixelIndex(GUI_DEVICE * pDevice, int x, int y, int PixelIndex) {//使用LCD快速打点函数LCD_Fast_DrawPoint(x, y, PixelIndex);
}//读点
static unsigned int _GetPixelIndex(GUI_DEVICE * pDevice, int x, int y) {unsigned int PixelIndex;//// Convert logical into physical coordinates (Dep. on LCDConf.h)//#if (LCD_MIRROR_X == 1) || (LCD_MIRROR_Y == 1) || (LCD_SWAP_XY == 1)int xPhys, yPhys;xPhys = LOG2PHYS_X(x, y);yPhys = LOG2PHYS_Y(x, y);#else#define xPhys x#define yPhys y#endifGUI_USE_PARA(pDevice);GUI_USE_PARA(x);GUI_USE_PARA(y);{//// Write into hardware ... Adapt to your system//// TBD by customer...//PixelIndex = LCD_ReadPoint(x, y);}#if (LCD_MIRROR_X == 0) && (LCD_MIRROR_Y == 0) && (LCD_SWAP_XY == 0)#undef xPhys#undef yPhys#endifreturn PixelIndex;
}//指定区域填充颜色
static void _FillRect(GUI_DEVICE * pDevice, int x0, int y0, int x1, int y1) {LCD_Fill(x0, y0, x1, y1, LCD_COLORINDEX);
}//绘制16BPP位图
static void _DrawBitLine16BPP(GUI_DEVICE * pDevice, int x, int y, U16 const GUI_UNI_PTR * p, int xsize) {LCD_PIXELINDEX pixel;LCD_SetCursor(x, y);*(vu16 *)(0x6001FFFE) = lcddev.wramcmd;   //0x6001FFFE 为LCD的SRAM所在首地址for (;xsize > 0; xsize--, x++, p++) {pixel = *p;_SetPixelIndex(pDevice, x, y, pixel);}
}
  • LCDConf_FlexColor_Template.c文件
  • LcdWriteReg、LcdWriteData、LcdWriteDataMultiple、LcdReadDataMultiple。修改这个程序后,可以直接使用STemWin的LCD驱动程序。但是由于我们使用的是自己的LCD驱动程序,所将这四个函数注释掉。
void LCD_X_Config(void) {//// Set display driver and color conversion///* GUIDRV_Template_API 使用自己的API接口, 所以前面的4个读写数据或寄存器的函数都没用*/GUI_DEVICE_CreateAndLink(&GUIDRV_Template_API, GUICC_M565, 0, 0);//// Display driver configuration, required for Lin-driver//LCD_SetSizeEx (0, lcddev.width , lcddev.height);LCD_SetVSizeEx(0, lcddev.width, lcddev.height);/*GUI与触摸屏进行位置校准*/if(lcddev.dir == 0) //竖屏{GUI_TOUCH_Calibrate(GUI_COORD_X,0,320,0,319);GUI_TOUCH_Calibrate(GUI_COORD_Y,0,480,0,479);}else //横屏{GUI_TOUCH_Calibrate(GUI_COORD_X,0,480,0,479);GUI_TOUCH_Calibrate(GUI_COORD_Y,0,320,0,319);}
}

以上LCD显示屏的STemWin的LCD显示驱动就移植成功了,可以使用一下相关的显示函数测试一下,看是否能够运行成功。

四、STemWin的触摸屏驱动移植

1、创建一个.c文件或者在触摸屏驱动代码下,添加STemWin的触摸屏驱动代码

STemWin真正调用的是int  GUI_TOUCH_X_MeasureX(void) 和 int  GUI_TOUCH_X_MeasureY(void),用来获取x,y坐标的数据,所以只要将触摸屏的对应获取x坐标、y坐标的驱动放到里面就可以了。

其他3个函数可以实现也可以省略。

int  GUI_TOUCH_X_MeasureX(void)
{int32_t xvalue;tp_dev.scan(0);xvalue=tp_dev.x[0];return xvalue;
}int  GUI_TOUCH_X_MeasureY(void)
{int32_t yvalue;tp_dev.scan(0);yvalue = tp_dev.y[0];return yvalue;
}void GUI_TOUCH_X_ActivateX(void)
{}void GUI_TOUCH_X_ActivateY(void)
{}void GUI_TOUCH_X_Disable(void)
{}

以上大致就完成了STemWin的移植了,这个时候就用STemWin的API进行GUI的设计了!

有关STemWin接口的api在Document文件夹中!

五、补充

STemWin官方手册中提到的初始化过程

STM32F4移植STemWin相关推荐

  1. 超详细!!!STM32F407ZGT6HAL库移植STemwin(基于正点原子最小系统板+GUIBuilder)

    第一次写博客,我以为会是点灯的,没想到留给了GUI,但是第一次写,可能写的不够好欢迎大家批评指正. 最近由于比赛的要求,需要给自己的LCD设计GUI界面,在查了一些资料后,决定先学STemwin然后学 ...

  2. 基于STM32F4移植W5500官方驱动库ioLibrary_Driver(转)

    源: 基于STM32F4移植W5500官方驱动库ioLibrary_Driver 参考: 基于STM32+W5500 的Ethernet和Internet移植 Upgrade W5500 Throug ...

  3. ST7701芯片820*320屏幕移植stemwin

    简要说明 如题,公司最近更换820*320屏幕,移植stemwin,使用3线spi通讯+16RGB,这屏幕工作流程为:首先通过3线spi发送初始化指令,之后通过16bitRGB发送像素点. 移植过程参 ...

  4. 玩转RT-Thread系列教程(6)--移植STemwin

    玩转RT-Thread系列教程(6)–移植STemwin 一.STemwin介绍 在实际应用中我们时常需要制作 UI 界面来实现人机交互,简单的 UI 我们可以自己直接写代码,但是对于那些复杂的交互方 ...

  5. stm32使用自定义打点函数方式移植stemwin

    stm32使用自定义打点函数方式移植stemwin 背景 显示过程 移植简述 打点函数 stemwin移植要点 实物效果 背景 oled屏移植stemwin,有两种方式,通过自定义打点方式进行移植,或 ...

  6. STM32F4移植EMWIN(RA8875驱动显示屏)

    在网上找了众多资料后,终于根据正点原子和F4 EMWIN移植文档和网上的一个例程资料,在F4上成功移植了EMWIN. 一开始步骤和正点原子都一样,只是因为显示屏的驱动芯片不同,在GUIDRV_Temp ...

  7. STM32移植STemwin

    一.准备基础程序 基于正点原子stm32战舰开发板的移植 1.    正点原子程序下载: 资料盘 战舰  开发板资料A盘: https://pan.baidu.com/s/1qZgG-UAznhQWg ...

  8. STM32F103移植STEMWIN并驱动0.96寸OLED实现弹球界面效果

    现在很多带显示屏的电子产品,在待机状态下都有一个待机界面,最为经典的当属弹球界面了,当弹球碰到屏幕边界之后则反弹,先上效果图: 由于是移植了STEMWIN,所以只有STM系列单片机才可以正常跑该程序. ...

  9. 【STemWin】STM32F429IG单片机用LTDC驱动正点原子7寸RGB彩色触摸屏,并裸机移植STemWin图形库

    [器件型号] 单片机采用STM32F429IG,运行频率为180MHz,外部晶振HSE的频率为25MHz. 开发板采用外部32MB的SDRAM内存作显存.显示屏分辨率为800×480,颜色格式为RGB ...

最新文章

  1. qt 拖拽 修改大小
  2. JavaScript数组随机排序
  3. 一步步在Docker里运行Web应用
  4. 长安渝北工厂机器人_长安工厂探秘!解密CS75 PLUS究竟是怎样造出来的
  5. Vue 脚手架配置代理
  6. JSON C# Class Generator ---由json字符串生成C#实体类的工具
  7. POJ - 2069 Super Star HDU - 3007 Buried memory
  8. mysql 自然排序_如何在mysql中实现自然排序
  9. linux安装或卸载mysql5,Linux环境下卸载、安装及配置MySQL5.1
  10. 建立网站需要什么条件_教育学校网站建设有什么作用?学校建立网站为的是什么?...
  11. Gym 101775 D (思维)
  12. 787. K 站中转内最便宜的航班
  13. Promethes监控华为S5720交换机
  14. 有点甜的小姐姐,概念原画师Z.W.Gu作品
  15. 【Linux】Ubuntu 18.04网易云音乐安装后无法打开问题解决
  16. 自制Microbit图形化编程小车
  17. kicad 排针_gEDA 入门
  18. CF 237A (Cash)
  19. Java语言对字节数组截取指定长度
  20. 51CTO高阳访谈直播全文播放

热门文章

  1. 西门子收购家庭娱乐软件供应商Myrio【ZZ】
  2. 基于Verilog用状态机设计交通灯控制器
  3. 思科网络技术学院2002年会(上)(转)
  4. Oracle 日期时间范围查询
  5. 操作系统安装和u盘认识
  6. 项目管理(知识体系概述)
  7. 淘宝图片空间的图片可以删除吗?
  8. 打开ftp服务器上的文件夹发生错误 请检查是否有权向访问该文件夹
  9. 首届中国网络文学论坛
  10. Flash Socket 编程(1)