我在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这个功能显示就出现异常。如下图所示。
和例程提供的函数相差太大,基本上就是错误,除了显示范围正确外。
正常应该显示的效果
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);
花了两天来查这个问题,但是一直没有解决。大家是不是也遇到过这个问题。
目前我怀疑两点,第一是该GUI使用了浮点运算,是不是和FPU有关系?
在使用alpha后出现这种现象,和GUI底层有关系。但是被封装了,不能查看。
此帖出自
小平头技术问答
根据自己调试和网上查找资源,总结一下出现该问题的主要原因:
1、官方说明一定要使用版本要一直,也就是我使用522版本的GUI。h等等文件,你如果使用528版本的库文件就很容易出错。包含说用GUIBuilder也是如此。因为不同版本间存在一点问题,我们是看不到源文件的。
2,驱动函数一定要写好,尤其是读写函数,这将决定你显示的效果,包括速度’颜 {MOD}等问题。
3‘一定要优化划线,填充甚至BMP显示函数。
4、了解自己写的底层驱动与GUIDRV和LCDConf之间是如何建立关系的。
一周热门 更多>