[经验] STM32F765@216MHz刷STemWin的Demo【代码】【视频】

Kεnny   2019-2-22 01:00 楼主
本文public自《STM32F765@216MHz输出I2S试验ES9023P音频听感》链接(https://bbs.eeworld.com.cn/thread-1069926-1-1.html) 作者的开发板使用STM32F765VIT6@216MHz,可以免费使用STemWin。至于STemWin是什么,是emWin的ST授权版本,而emWin的前世就是上古时期的ucGUI。 说到ucGUI,那就不得不谈谈ucGUI的移植了,就跟说起高端电脑软件就不得不聊聊如何安装卸载一样,步骤如下: (1)准备ucGUI源码,复制./Start/GUI目录、./Start/Config目录和./Sample/GUIDemo到工程目录下,将./Sample/GUI_X目录下2个文件GUI_X.c和GUI_X_Touch.c复制到Config目录下,得到如下结构:
360截图20190221225911804.png
(2)配置LCDConf.h和GUIConf.h中的参数,重定义LCD_INIT_CONTROLLER()宏 (3)实现LCDDummy.c中LCD_L0_SetPixelIndex()、LCD_L0_GetPixelIndex()方法,将GUI_X.c中的变量OS_TimeMS定时1ms增加1,到此已经ucGUI已经可以跑起来了!! (4)优化: 优化LCD_L0_XorPixel()、LCD_L0_DrawHLine()、LCD_L0_DrawVLine()、LCD_L0_FillRect()可以显著提高刷屏速度 (5)支持TouchPanel: 在此工程基础上GUIConf.h中开启GUI_SUPPORT_TOUCH宏,实现GUI_X_Touch.c中GUI_TOUCH_X_MeasureX()和 GUI_TOUCH_X_MeasureY()方法,配置GUITouchConf.h中GUI_TOUCH_AD_LEFT等校准参数,并定时刷GUI_TOUCH_Exec()和GUI_Exec() /************************************************************************************/ 扯远了,回到正题上,我们来说下STemWin的移植吧,说白了,跟ucGUI大同小异,步骤 (1)准备STemWin源码一份,建立如下目录:
STemWin目录.PNG
将源码中./inc目录下所有文件复制到inc目录下,
将./Config目录下,如下图选中的文件,复制到Config目录下,并将LCDConf_FlexColor_Template.c和LCDConf_FlexColor_Template.h改名为LCDConf.c和LCDConf.h:
STemWin目录1.PNG
将./Lib目录下STemWin540_CM7_Keil.lib复制到lib目录下,因为本文作者使用Keil,不使用OS,不使用优化(optimization)
将./OS目录下GUI_X.c复制到os目录下
到ST的Cube包随便找个STemWin的application,将目录下的/GUIDemo整个复制到工程目录下
(2)将GUIConf.c中的GUI_NUMBYTES宏改小些,作者改为110Kbyte,原本是2Mbyte,GUIConf.h中检查下各种宏都开启
GUIConf.h.PNG
(3)LCDConf.c配置宏XSIZE_PHYS和YSIZE_PHYS为实际物理像素,作者使用320*240的TFT即改为320和240;重写LCD_X_Config()方法并在LCD_X_DisplayDriver()中追加初始化LCD的驱动函数(注意添加头文件),其他没用的就删掉,LCDConf.h中编译宏#ifndef LCDCONF_H这个都不需要改动了
LCDConf.h.PNG
(4)重点来了,GUIDRV_Template.c中实现_SetPixelIndex()、_GetPixelIndex()即可,优化_XorPixel()、_FillRect()、_DrawHLine()、_DrawVLine()、_DrawBitLine16BPP()可以显著提升刷屏速度,GUIDRV_Template.h可以不改动。将GUI_X.c中的变量OS_TimeMS定时1ms增加1。到目前为止已经可以在main()中跑Demo了
(5)支持TouchPanel:在Config目录下新建一个C文件,随便取个名,作者取为GUI_X_Touch.c,在文件中包含“GUI.h”,并实现GUI_TOUCH_X_MeasureX()和GUI_TOUCH_X_MeasureY()方法。并定时刷GUI_TOUCH_Exec(),记得要判断在初始化GUI之后再刷GUI_TOUCH_Exec(),如果没有初始化GUI就刷会死机,这就是C不支持面向对象的封装导致我们需要严格进行状态机编码,全局变量满天飞,可读性不好
(6)在GUIDemo.h中Configuration of modules to be used,选中你喜欢的Demo module,在main()中运行GUIDEMO_Main()即可
【最后说一点,运行STemWin前需要开启CRC校验,不然无法启动】
作者的STM32F765@216MHz开发板,LCD驱动器是ssd1289,TP芯片是xpt2046,运行STemWin刷Demo效果:
如果视频看不了,请复制链接单独查看(http://v.youku.com/v_show/id_XND ... b492547be5ab6f27398
作者未使用OS,通过CubeMX建立的标准HAL工程,按照惯例,双手奉上,供大家取用:
【附件,工程压缩包,复制链接打开即可download
https://m.eeworld.com.cn/bbs/forum.php?mod=attachment&aid=NDAyODczfGM0ODMyYTUxNzUzNzMyYWQ4Y2I4NjE1ZjY0MTk1OGUwfDE3MzE2Nzg4ODQ%3D&request=yes&_f=.7z
此内容由EEWORLD论坛网友Kεnny原创,如需转载或用于商业用途需征得作者同意并注明出处
本帖最后由 Kεnny 于 2019-2-22 10:13 编辑

回复评论 (1)

学习,慢慢消化。
点赞  2019-2-23 12:58
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复