你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

F7-DISCO笔记之四:STemWin试水

[复制链接]
netlhx 发布时间:2015-8-15 09:59
今天折腾了一下STEMWIN,做个简单的小试验。

STEMWIN是一个GUI界面,有自己一套完整的窗口部件,有自己的消息循环处理,说老实说,刚开始看到STEMWIN的演示程序的时候,我想起了WIN95。其实EMWIN的消息机制几乎和早期的WINDOWS完全一致,只不过简化了许多,哈哈。按理说,熟悉WIN32程序设计的人来使用这个STEMWIN,应该是毫无阻碍。

ST为EVAL系列板提供了完整的DEMO,其它的就对不起了。好在新版的HAL固件库为F7-DISCO也提供了一个DEMO,虽然只是一个可怜的HELLO WORLD程序,好歹也是一个DEMO啊! 得,就研究这个DEMO入手吧。

QQ截图20150815092046.png

STEMWIN和其它的三方固件稍微有点区别,直接以LIB的形式提供给用户,如果要从源码编译,自己去下载源码吧。

既然是LIB的形式,开放给用户的就有限了,实际上STEMWIN已经做好了,你只要提供LCD的接口给它就行了

QQ截图20150815093106.png

这里就是我们可以配置、修改的地方。一个一个来说

GUIConf.x 用来给STEMWIN分配内存空间
GUIDRV_Template.x 用来加入自己的读写像素点函数
LCDConf_FlexColor_Template.x  LCDConf_Lin_Template.x 对应非线性及线性LCD配置函数,在F7-DISCO中,由于内置LTDC,经配置后的VRAM就是一个线性空间,所以就在这里配置自己的LCD低层操作就行了。
SIMC.x 用来配置模拟器的

在F7-DISCO上,将GUIConf.x和 LCDConf_Lin_Template.x 复制到用户工程里面,对它们进行修改。

在我的工程里面,将 LCDConf_Lin_Template.x 均修改成为LCDConf.x文件。

下面先看修改后的GUIConf.c文件

QQ截图20150815094151.png

这里没有什么特别的,就是分配一块空间给STEMWIN用,注意这个值不可太大,也不可太小,我就分了100K。

LCDConf.c文件有几个地方要注意一下

QQ截图20150815094440.png

注意上面标注的几个地方,无非是LCD大小,色彩模式,VRAM地址而已。注意要和LTDC中配置的一致,否则可能花屏或者进入HARDFAULT。

另外一个需要修改的地方在下面,这个是GUI在初始化时自动调用的LCD配置函数。

QQ截图20150815094732.png

这样简单的配置之后,底层的适配就完成了。

不过要注意的是,如果使用的其它的LCD控制器,可没有这么简单,要提供读写像素点的函数,还有要配置矩形复制函数,一大堆。不过在F7上就是这么简单。

接下来就可以调用GUI函数了,GUI函数有两种类型,一种是带OS的,另一种是不带OS的。刚入门,就不用OS版了,用个单线程先玩玩。

先调用GUI_Init()来初始化GUI库,GUI初始化流程如下

QQ截图20150815093920.png

上面的几个函数都分别位于GUIConf和LCDConf文件中,回头去仔细看下。

下面来看下STEMWIN中很有用的一个组件GRAPH吧,很多采集信号用的界面都会用到它。不过这东西太复杂,研究了半天还是迷迷糊糊,所以先搞个简单的先看看。代码如下

QQ截图20150815095358.png

在使用STEMWIN之前,记得先打开CRC的时钟,官方文档这么说的。

创建200个随机数据,显示在GRAPH上面。

初始化SDRAM,因为LTDC用它来做显存。

GUI初始化

创建两个组件,一个是WINDOW,另一个是GRAPH,WINDOW作为GRAPH的父窗口。

将数据附加到GRAPH上面。

OK,基本完成,下面是运行效果。细节以后再研究,入个门先。

IMG_20150815_095649.jpg

附:界面是用GUIBUILDER创建的,下面是WINDOWDLG.C文件

  1. /*********************************************************************
  2. *                                                                    *
  3. *                SEGGER Microcontroller GmbH & Co. KG                *
  4. *        Solutions for real time microcontroller applications        *
  5. *                                                                    *
  6. **********************************************************************
  7. *                                                                    *
  8. * C-file generated by:                                               *
  9. *                                                                    *
  10. *        GUI_Builder for emWin version 5.28                          *
  11. *        Compiled Jan 30 2015, 16:41:06                              *
  12. *        (c) 2015 Segger Microcontroller GmbH & Co. KG               *
  13. *                                                                    *
  14. **********************************************************************
  15. *                                                                    *
  16. *        Internet: www.segger.com  Support: support@segger.com       *
  17. *                                                                    *
  18. **********************************************************************
  19. */

  20. // USER START (Optionally insert additional includes)
  21. // USER END

  22. #include "DIALOG.h"

  23. /*********************************************************************
  24. *
  25. *       Defines
  26. *
  27. **********************************************************************
  28. */
  29. #define ID_WINDOW_0    (GUI_ID_USER + 0x00)
  30. #define ID_GRAPH_0    (GUI_ID_USER + 0x04)


  31. // USER START (Optionally insert additional defines)
  32. // USER END

  33. /*********************************************************************
  34. *
  35. *       Static data
  36. *
  37. **********************************************************************
  38. */

  39. // USER START (Optionally insert additional static data)
  40. // USER END

  41. /*********************************************************************
  42. *
  43. *       _aDialogCreate
  44. */
  45. static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
  46.   { WINDOW_CreateIndirect, "Window", ID_WINDOW_0, 0, 0, 480, 272, 0, 0x0, 0 },
  47.   { GRAPH_CreateIndirect, "Graph", ID_GRAPH_0, 67, 19, 347, 201, 0, 0x0, 0 },
  48.   // USER START (Optionally insert additional widgets)
  49.   // USER END
  50. };

  51. /*********************************************************************
  52. *
  53. *       Static code
  54. *
  55. **********************************************************************
  56. */

  57. // USER START (Optionally insert additional static code)
  58. // USER END

  59. /*********************************************************************
  60. *
  61. *       _cbDialog
  62. */
  63. static void _cbDialog(WM_MESSAGE * pMsg) {
  64.   // USER START (Optionally insert additional variables)
  65.   // USER END

  66.   switch (pMsg->MsgId) {
  67.   // USER START (Optionally insert additional message handling)
  68.   // USER END
  69.   default:
  70.     WM_DefaultProc(pMsg);
  71.     break;
  72.   }
  73. }

  74. /*********************************************************************
  75. *
  76. *       Public code
  77. *
  78. **********************************************************************
  79. */
  80. /*********************************************************************
  81. *
  82. *       CreateWindow
  83. */
  84. WM_HWIN CreateWindow(void);
  85. WM_HWIN CreateWindow(void) {
  86.   WM_HWIN hWin;

  87.   hWin = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0);
  88.   return hWin;
  89. }

  90. // USER START (Optionally insert additional public code)
  91. // USER END

  92. /*************************** End of file ****************************/
复制代码

收藏 1 评论23 发布时间:2015-8-15 09:59

举报

23个回答
yanhaijian 回答时间:2015-8-15 11:15:16
好东西,我了顶顶。
mark0668 回答时间:2015-8-15 11:59:08
感谢分享
天使♀的☆宇★翼 回答时间:2015-8-15 13:11:05
支持一下楼主~~
你好我好大家好! 回答时间:2015-8-16 09:41:12
:):):):)
shaoziyang 回答时间:2015-8-17 09:16:38
学习一下。
风子 回答时间:2015-8-17 09:22:37
顶楼主
Tension 回答时间:2015-8-17 09:40:34
em+Win,和Windows像也正常,不过,GUI基本都是消息驱动的
netlhx 回答时间:2015-8-17 09:42:15
Tension 发表于 2015-8-17 09:40
em+Win,和Windows像也正常,不过,GUI基本都是消息驱动的

WINDOWS也是消息驱动不是
shanji 回答时间:2015-8-17 10:22:32
楼主好厉害,问问F7的QSPI是啥东西
123下一页

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版