基于 STemWin的屏幕旋转 1前言 客户反馈利用的F429-Disco板上的STemwin的Demo程序无法实现的屏幕的0,90,180,270度的旋转。 2 问题跟进与分析 通过查看stemwin 的手册,发现有如下三种方式可以实现屏幕的旋转功能。 1) 利用GUI_SetOrientation()和相对应的宏参数GUI_MIRROR_X,GUI_MIRROR_Y,GUI_SWAP_XY 2)利用LCD_MIRROR_X,LCD_MIRROR_Y,LCD_SWAP_XY 3)可以选择不同的驱动函数GUIDRV_LIN_32,GUIDRV_LIN_OX_32等,此种方法只是基于LTDC屏的写的,所以只能用在LTDC屏,如下 查看LCDConf_stm32f429i_disco_MB1075.c中代码发现驱动程序中有如下的定义,也就是上文提到的方法二,客户基于这宏进行了修改,但是屏幕旋转功能并没有生效。 通过跟踪代码,发现这些宏在代码中并没有用到,所以客户在修改这些宏定义是完全不会起作用的,然后通过代码调试,发现可以通过 此行驱动的选择中的宏DISPLAY_DRIVER_0来设置屏幕的旋转功能也就是我们说的第三种方法, 可以找到对应的宏定义 可以修改宏DISPLAY_DRIVER_0 对应的参数设置成如下就查找对应的表,就可以得到相关的显示效果。 其他的宏定义在文件GUIDRV_Lin.h如下 4)另外客户又询问了如何在FMC屏实现GUI界面的旋转功能,查找对应的代码发现有GUI_MIRROR_X,GUI_MIRROR_Y,GUI_SWAP_XY相关的宏定义,如是用GUI_SetOrientation()函数去设置,发现不能起作用,并且此函数返回值一直是1,有看相关的资料,怀疑是为GUI分配的虚拟内存不够,但是加大内存也是返回1,查看LCDConf.c文件中的code发现有如下定义可以取代GUI_SetOrientation()函数的功能 对照表一中的参数修改即可得到对应的显示效果。 结论 在查看STemWin的用户手册可以看到很多功能的实现方法,有时候也需要结合实际的代码看下,具体功能实现方法有没有修改,根据代码需求进行一些差异化的修改。 文档下载 更多实战经验 |
谢谢支持
我要在程序运行中切换横竖屏,使用GUI_SetOrientation()函数总是失败,请问是啥原因呢,用的是RGB屏,也怀疑内存不够,增加缓存也不行,请问应该怎么解决呢?