有没有人遇见STemwin透明显示这个问题,求帮忙。

2019-03-23 17:55发布


我在STM32F411上移植STemwin和FreeRTOS软件。STemwin这个GUI软件很强大,想学习一下。驱动都移植好了,也可以正常显示。就按教程一步一步的学习。遇到了一些问题,但都解决了。在这里也就我分析的过程做一个说明。
GUI_SetBkColor(GUI_BLUE);
        GUI_Clear();
        GUI_SetPenSize(10);
        GUI_SetColor(GUI_RED);
        GUI_DrawLine(00, 10, 160, 90);
        GUI_DrawLine(00, 90, 160, 10);
        GUI_SetBkColor(GUI_BLACK);
        GUI_SetColor(GUI_WHITE);
        GUI_SetTextMode(GUI_TM_NORMAL);
        GUI_DispStringAt("GUI_TM_NORMAL" , 0, 10);
        GUI_SetTextMode(GUI_TM_REV);
        GUI_DispStringAt("GUI_TM_REV" , 0, 26);
        GUI_SetTextMode(GUI_TM_TRANS);
        GUI_DispStringAt("GUI_TM_TRANS" , 0, 42);
        GUI_SetTextMode(GUI_TM_XOR);
        GUI_DispStringAt("GUI_TM_XOR" , 0, 58);
        GUI_SetTextMode(GUI_TM_TRANS | GUI_TM_REV);
        GUI_DispStringAt("GUI_TM_TRANS | GUI_TM_REV", 0, 74);
        GUI_SetTextMode(GUI_TM_TRANS | GUI_TM_REV);
        GUI_DispStringAt("GUI_TM_TRANS | GUI_TM_REV", 0, 74);

正常显示 正常显示
这个效果中可以证明可以正常读到显示屏上的点,因为在GUI_TM_XOR有一个异或操作,这个就用到了读点函数。显示效果过和官方文档显示的一致。当然程序做了一部分修改,屏太小了。
但是一打开alpha这个功能显示就出现异常。如下图所示。
IMG_20160721_090553.jpg
和例程提供的函数相差太大,基本上就是错误,除了显示范围正确外。
正常.jpg
                   正常应该显示的效果
        GUI_EnableAlpha(1);//打开alpha
        GUI_SetBkColor(GUI_WHITE);
        GUI_Clear();
        GUI_SetColor((0x40uL << 24) | GUI_RED);
        GUI_FillRect(0, 0, 39, 39);
        GUI_SetColor((0x80uL << 24) | GUI_GREEN);
        GUI_FillRect(20, 20, 69, 69);
        GUI_SetColor((0xC0uL << 24) | GUI_BLUE);
        GUI_FillRect(40, 40, 89, 89);
        GUI_EnableAlpha(0); //关闭alpha显示



还有一个效果是,在开启并关闭alpha通道后,再做之前的任何操作,全部不能正常显示。
         GUI_EnableAlpha(1);
        GUI_SetBkColor(GUI_WHITE);
        GUI_Clear();
        GUI_SetColor((0x40uL << 24) | GUI_RED);
        GUI_FillRect(0, 0, 39, 39);
        GUI_SetColor((0x80uL << 24) | GUI_GREEN);
        GUI_FillRect(20, 20, 69, 69);
        GUI_SetColor((0xC0uL << 24) | GUI_BLUE);
        GUI_FillRect(40, 40, 89, 89);
        GUI_EnableAlpha(0);
        //关闭alpha后重新显示正常的效果
        GUI_SetBkColor(GUI_BLUE);
        GUI_Clear();
        GUI_SetPenSize(10);
        GUI_SetColor(GUI_RED);
        GUI_DrawLine(00, 10, 160, 90);
        GUI_DrawLine(00, 90, 160, 10);
        GUI_SetBkColor(GUI_BLACK);
        GUI_SetColor(GUI_WHITE);
        GUI_SetTextMode(GUI_TM_NORMAL);
        GUI_DispStringAt("GUI_TM_NORMAL" , 0, 10);
        GUI_SetTextMode(GUI_TM_REV);
        GUI_DispStringAt("GUI_TM_REV" , 0, 26);
        GUI_SetTextMode(GUI_TM_TRANS);
        GUI_DispStringAt("GUI_TM_TRANS" , 0, 42);
        GUI_SetTextMode(GUI_TM_XOR);
        GUI_DispStringAt("GUI_TM_XOR" , 0, 58);
        GUI_SetTextMode(GUI_TM_TRANS | GUI_TM_REV);
        GUI_DispStringAt("GUI_TM_TRANS | GUI_TM_REV", 0, 74);
        GUI_SetTextMode(GUI_TM_TRANS | GUI_TM_REV);
        GUI_DispStringAt("GUI_TM_TRANS | GUI_TM_REV", 0, 74);
IMG_20160721_094104.jpg

花了两天来查这个问题,但是一直没有解决。大家是不是也遇到过这个问题。
目前我怀疑两点,第一是该GUI使用了浮点运算,是不是和FPU有关系?
在使用alpha后出现这种现象,和GUI底层有关系。但是被封装了,不能查看。
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
cxzs1234
1楼-- · 2019-03-23 21:34
/ 问题已解决。是自己使用错了lib。自己使用的是528版本的lib,更换成522版本的就可以使用了。
根据自己调试和网上查找资源,总结一下出现该问题的主要原因:
1、官方说明一定要使用版本要一直,也就是我使用522版本的GUI。h等等文件,你如果使用528版本的库文件就很容易出错。包含说用GUIBuilder也是如此。因为不同版本间存在一点问题,我们是看不到源文件的。
2,驱动函数一定要写好,尤其是读写函数,这将决定你显示的效果,包括速度’颜 {MOD}等问题。
3‘一定要优化划线,填充甚至BMP显示函数。
4、了解自己写的底层驱动与GUIDRV和LCDConf之间是如何建立关系的。
cxzs1234
2楼-- · 2019-03-24 01:00
 精彩回答 2  元偷偷看……
流年u7
3楼-- · 2019-03-24 04:18
感谢分享
dingmu
4楼-- · 2019-03-24 04:54
在PC端模拟和板子上模拟还是有差异,看来到时候还是得弄快板子来弄!
suxuan
5楼-- · 2019-03-24 07:16
 精彩回答 2  元偷偷看……
suxuan
6楼-- · 2019-03-24 08:46
底层驱动与GUIDRV和LCDConf之间是如何建立关系的 这个看不到源码 我应该怎么去弄懂啊 “??

一周热门 更多>