从网上了解到嵌入式第三方GUI,emwin、ucGUI、STemWin,ST官方有GUI的应用,两天的初步了解,马上行动;
硬件:CPU:STM32F103C8
屏幕:OLED 128*64
驱动:SH1106
基础:已经移植好了FreeRTOS,并且能够控制显示,本文只是介绍如何在原来的FreeRTOS工程中通过手动添加,使用STemWin
1、通过ST官网注册下载
2、工程中添加资源
在下载的文件中找到要移植的文件如下
将以上文件全部拷贝到自己项目下建立的STemWin文件夹中
在工程中添加对应的文件有:config,lib,os
注意:尽管我用的FreeRTOS,但我没用GUI_X_OS.c,因为添加他会报错,这里可能是我不是用STM32cubeMX生成的驱动代码,缺少一些变量定义;
3、修改文件
3.1修改LCDconf_lin_Template.h改为LCDconf.h
3.2修改LCDconf_lin_Template.c
根据自己显示屏大小修改下面参数
根据显示驱动修改下面参数
/*********************************************************************
*
* LCD_X_Config
*
* Purpose:
* Called during the initialization process in order to set up the
* display driver configuration.
*
*/
u8 stemwinbuff[64][16];//64行,16列16*8=128
void LCD_X_Config(void) {
GUI_DEVICE_CreateAndLink(GUIDRV_LIN_1,GUICC_1, 0, 0);
LCD_SetSizeEx (0, XSIZE_PHYS, YSIZE_PHYS);
LCD_SetVSizeEx(0, XSIZE_PHYS, YSIZE_PHYS);
LCD_SetVRAMAddrEx(0, (void *)&stemwinbuff[0][0]);
}
其中stemwinbuff是我自己添加的,这也就是说显示点阵内容会输出到这数组里;
这里需要特别注意GUI_DEVICE_CreateAndLink(GUIDRV_LIN_1,GUICC_1, 0, 0);
STemWin提供两个驱动,LCDConf_FlexColor_Template.c和LCDConf_Lin_Template.c
黑白选择LCDConf_Lin_Template.c,GUICC_1是黑白参数。
当然emWin还提供其他驱动库,但下载的包里没找到;
先不去管他,做出来理解应用为重;
由于这个驱动库和我的硬件驱动不匹配,这里需要做一下转换;
4、显示数据转换
这一步不是必须的,如果驱动和硬件匹配就不需要
从官方了解到GUIDRV_LIN_1驱动的显示方式如下:
也就是stemwinsuff[64][16]的数据是按照上图存储的。
而我的硬件实际显示驱动方式如下:
我要显示的是buff[8][128]是按照上图存储;
也就是后面需要将stemwinsuff[64][16]转换成buff[8][128]。
5、主程序中添加
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_CRC, ENABLE);//CRC使能
GUI_Init();
GUI_UC_SetEncodeUTF8();
GUI_DispStringAt("123456",0,0);
STemWin_to_oled1106();//显示数据转换
注意CRC必须使能,这在官网都有介绍
6、注意事项
关于STemWin的学习网上还是很多的,但由于每个用的硬件不一致,根据他人的方式学习可能导致不成功。我就失败了好几次,主要是emwin文件太长近1000页,没那么多耐心慢慢看;
我觉得把握几点
1、STemWin画图显示的数据输出在哪里
2、显示输出格式是什么,怎么和自己的配合
3、提供的文件大致作用
4、由于OLED数据需要转换,多开销了1KB,而STemwin也需要开销内存,导致内存不够
刚测试时,编译时候又报错了
目录