STM32F4移植STemWin

STM32F4移植STemWin一

目录

一、STemWin的文件结构

二、STemWin的移植步骤

 三、STemWin的LCD驱动移植

四、STemWin的触摸屏驱动移植

五、补充


STM32芯片为:STM32F407VGT6

STemWin的版本为:5.44

一、STemWin的文件结构

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

STM32F4移植STemWin

  • 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

STM32F4移植STemWin

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

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

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

STM32F4移植STemWin

举例: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 #endif GUI_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 #endif return 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

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/218490.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 上午7:07
下一篇 2026年3月18日 上午7:08


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号