目录

一、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. springMVC面试问题整理一
  2. sublime使用技巧总结
  3. Spring Security基于角色的权限管理
  4. 传统公司部署OpenStack(t版)简易介绍(一)——环境部署
  5. netlink怎么读_内核交互 netlink,检测部分进程死亡和启动。
  6. 前后台分离--概念相关
  7. Magicodes.IE 2.4发布
  8. 手机web网页制作的认识(有关meta标签)
  9. 【鲲鹏来了】手把手教你在鲲鹏上使用编程语言——C语言
  10. sklearn炼丹术之——交叉验证Cross-validation: evaluating estimator performance
  11. 谷歌宣布 Linux Kernel、Kubernetes 0day 漏洞奖励加倍
  12. 安卓开发 底部导航图标切换时动画效果_体验安卓 10:好用百倍都不止!
  13. Grails里的集成测试代码试例
  14. STC15单片机-数码管显示PCB板温度(TM1620驱动芯片使用介绍)
  15. 老人疯狂裂变引流视频推广微信小程序源码支持定时流量主
  16. 2018-09-26工作日报
  17. Classic Shell:找回 Windows 8 / Windows Server 2012 的经典的开始按钮和开始菜单
  18. 小白手动安装Win10系统
  19. one-stage two-stage 的区别
  20. Unity DOTween Yoyo循环运动

热门文章

  1. 学习yade日常错误2019.3.22
  2. Spring DataBufferLimitException: Exceeded limit on max bytes to buffer : 262144
  3. 选择马来西亚城市大学的六大理由
  4. 很短很感人的爱情故事:经典伤感QQ日志
  5. 通达信全市场数据导入指南—基于股票量化分析工具V2.0!
  6. Lifekeeper产品介绍与功能方面
  7. 利用批处理脚本删除指定日期前文件
  8. 【深度学习笔记】神经网络模型及经典算法知识点问答巩固(算法工程师面试笔试)
  9. Eclipse快捷键大全(转载)
  10. CS硕士妹子找工作杂谈(转载,北邮)