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

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扩展软件包
关注我们
st-img 微信公众号
st-img 手机版