STM32F4移植STemWin
目录
一、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相关推荐
- 超详细!!!STM32F407ZGT6HAL库移植STemwin(基于正点原子最小系统板+GUIBuilder)
第一次写博客,我以为会是点灯的,没想到留给了GUI,但是第一次写,可能写的不够好欢迎大家批评指正. 最近由于比赛的要求,需要给自己的LCD设计GUI界面,在查了一些资料后,决定先学STemwin然后学 ...
- 基于STM32F4移植W5500官方驱动库ioLibrary_Driver(转)
源: 基于STM32F4移植W5500官方驱动库ioLibrary_Driver 参考: 基于STM32+W5500 的Ethernet和Internet移植 Upgrade W5500 Throug ...
- ST7701芯片820*320屏幕移植stemwin
简要说明 如题,公司最近更换820*320屏幕,移植stemwin,使用3线spi通讯+16RGB,这屏幕工作流程为:首先通过3线spi发送初始化指令,之后通过16bitRGB发送像素点. 移植过程参 ...
- 玩转RT-Thread系列教程(6)--移植STemwin
玩转RT-Thread系列教程(6)–移植STemwin 一.STemwin介绍 在实际应用中我们时常需要制作 UI 界面来实现人机交互,简单的 UI 我们可以自己直接写代码,但是对于那些复杂的交互方 ...
- stm32使用自定义打点函数方式移植stemwin
stm32使用自定义打点函数方式移植stemwin 背景 显示过程 移植简述 打点函数 stemwin移植要点 实物效果 背景 oled屏移植stemwin,有两种方式,通过自定义打点方式进行移植,或 ...
- STM32F4移植EMWIN(RA8875驱动显示屏)
在网上找了众多资料后,终于根据正点原子和F4 EMWIN移植文档和网上的一个例程资料,在F4上成功移植了EMWIN. 一开始步骤和正点原子都一样,只是因为显示屏的驱动芯片不同,在GUIDRV_Temp ...
- STM32移植STemwin
一.准备基础程序 基于正点原子stm32战舰开发板的移植 1. 正点原子程序下载: 资料盘 战舰 开发板资料A盘: https://pan.baidu.com/s/1qZgG-UAznhQWg ...
- STM32F103移植STEMWIN并驱动0.96寸OLED实现弹球界面效果
现在很多带显示屏的电子产品,在待机状态下都有一个待机界面,最为经典的当属弹球界面了,当弹球碰到屏幕边界之后则反弹,先上效果图: 由于是移植了STEMWIN,所以只有STM系列单片机才可以正常跑该程序. ...
- 【STemWin】STM32F429IG单片机用LTDC驱动正点原子7寸RGB彩色触摸屏,并裸机移植STemWin图形库
[器件型号] 单片机采用STM32F429IG,运行频率为180MHz,外部晶振HSE的频率为25MHz. 开发板采用外部32MB的SDRAM内存作显存.显示屏分辨率为800×480,颜色格式为RGB ...
最新文章
- qt 拖拽 修改大小
- JavaScript数组随机排序
- 一步步在Docker里运行Web应用
- 长安渝北工厂机器人_长安工厂探秘!解密CS75 PLUS究竟是怎样造出来的
- Vue 脚手架配置代理
- JSON C# Class Generator ---由json字符串生成C#实体类的工具
- POJ - 2069 Super Star HDU - 3007 Buried memory
- mysql 自然排序_如何在mysql中实现自然排序
- linux安装或卸载mysql5,Linux环境下卸载、安装及配置MySQL5.1
- 建立网站需要什么条件_教育学校网站建设有什么作用?学校建立网站为的是什么?...
- Gym 101775 D (思维)
- 787. K 站中转内最便宜的航班
- Promethes监控华为S5720交换机
- 有点甜的小姐姐,概念原画师Z.W.Gu作品
- 【Linux】Ubuntu 18.04网易云音乐安装后无法打开问题解决
- 自制Microbit图形化编程小车
- kicad 排针_gEDA 入门
- CF 237A (Cash)
- Java语言对字节数组截取指定长度
- 51CTO高阳访谈直播全文播放