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

【评测站】怪兽F7,STemWin评测——免费的GUI

[复制链接]
eefishing 发布时间:2016-6-27 10:39

意法半导体向STM32客户免费提供STemWin软件。该软件内置SEGGER VNC虚拟网络计算系统,可运用互联网协议远程查看用户界面。该软件还为开发人员提供其它强大的功能,其中包括窗口管理器和小工具包、触摸屏/鼠标支持,存储器上下文可实现无闪屏刷新。

目前StemWin并不提供源码,记得好像只有2.9以前的GUI才有源码,这里StemWin是以库的形式提供的。

可以看出,这个库是针对M7而制作的,所以这里要使用StemWin的话,只要配置GUIConf.c与LCDConf.c两个文件就可以了

GUIConf.c主要是配置显示缓存的大小 。

LCDConf.c主要是配置与LCD相关的参数与函数。

LCD-TFT(液晶显示器——薄膜晶体管)显示器控制器提供并行数字 RGB (红色、绿色、蓝色)以及水平同步、垂直同步、像素时钟和数据使能信号,这些信号直接输出到不同 LCD和 TFT面板的接口。

层混合:

LTDC编程步骤:

1、在 RCC寄存器中使能 LTDC 时钟。
2、按照面板数据表配置所需像素时钟。
3、配置同步时序:VSYNC、HSYNC、垂直和水平后沿、有效数据区域以及前沿时序。
4、配置 LTDC_GCR 寄存器中的同步信号和时钟极性。
5、必要时,配置 LTDC_BCCR寄存器中的背景色。
6、配置 LTDC_IER和LTDC_LIPCR 寄存器中的所需中断。
7、通过执行以下编程操作配置第 1/2层的参数:
1)、编程LTDC_LxWHPCR和LTDC_WVPCR 寄存器中的层窗口的水平和垂直位置。层窗口必须位于有效数据区域
2)、编程LTDC_LxPFCR 寄存器中的像素输入格式
3)、 编程LTDC_LxCFBAR寄存器中的颜色帧起始地址
4)、 编程LTDC_LxCFBLR寄存器中的颜色帧缓冲区的行长和间距
5)、 编程LTDC_LxCFBLNR寄存器中的颜色帧缓冲区的行数
6)、 必要时,在LTDC_LxCLUTWR寄存器中为 CLUT 加载 RGB值及其地址
7)、 必要时,分别在LTDC_LxDCCR和LTDC_LxBFCR寄存器中配置默认颜色和混合系数
8、使能 LTDC_LxCR寄存器中的第 1/2层,必要时使能 CLUT 。
9、必要时,可分别在LTDC_GCR和 LTDC_LxCKCR寄存器中使能抖动和色键。也可以实时使能这两个功能。
10、通过 LTDC_SRCR 寄存器将影子寄存器重载到活动寄存器中。
11、使能 LTDC_GCR 寄存器中的 LCD-TFT控制器。
12、除 CLUT外,所有层参数均可实时修改。新配置必须通过配置LTDC_SRCR 寄存器立即重载或在垂直消隐周期内重载。

如下,LTDC的初始化函数。对板子上的LCD进行初始化。

  1. static void LCD_LL_LayerInit(U32 LayerIndex)
  2. {
  3.   LTDC_LayerCfgTypeDef             layer_cfg;
  4.   
  5.   if (LayerIndex < GUI_NUM_LAYERS)
  6.   {
  7.     /* Layer configuration */
  8.     layer_cfg.WindowX0 = 0;
  9.     layer_cfg.WindowX1 = XSIZE_PHYS;
  10.     layer_cfg.WindowY0 = 0;
  11.     layer_cfg.WindowY1 = YSIZE_PHYS;
  12.     layer_cfg.PixelFormat = LCD_LL_GetPixelformat(LayerIndex);
  13.     layer_cfg.FBStartAdress = ((uint32_t)0xC0000000);
  14.     layer_cfg.Alpha = 255;
  15.     layer_cfg.Alpha0 = 0;
  16.     layer_cfg.Backcolor.Blue = 0;
  17.     layer_cfg.Backcolor.Green = 0;
  18.     layer_cfg.Backcolor.Red = 0;
  19.     layer_cfg.BlendingFactor1 = LTDC_BLENDING_FACTOR1_PAxCA;
  20.     layer_cfg.BlendingFactor2 = LTDC_BLENDING_FACTOR2_PAxCA;
  21.     layer_cfg.ImageWidth = XSIZE_PHYS;
  22.     layer_cfg.ImageHeight = YSIZE_PHYS;
  23.     HAL_LTDC_ConfigLayer(&hltdc, &layer_cfg, LayerIndex);  
  24.    
  25.     /* Enable LUT on demand */
  26.     if (LCD_GetBitsPerPixelEx(LayerIndex) <= 8)
  27.     {
  28.       /* Enable usage of LUT for all modes with <= 8bpp*/
  29.       HAL_LTDC_EnableCLUT(&hltdc, LayerIndex);
  30.     }
  31.   }
  32. }
复制代码
  1. static void LCD_LL_Init(void)
  2. {
  3.   /* DeInit */
  4.   HAL_LTDC_DeInit(&hltdc);
  5.   
  6.   /* Set LCD Timings */
  7.   hltdc.Init.HorizontalSync = 40;
  8.   hltdc.Init.VerticalSync = 9;
  9.   hltdc.Init.AccumulatedHBP = 53;
  10.   hltdc.Init.AccumulatedVBP = 11;
  11.   hltdc.Init.AccumulatedActiveH = 283;
  12.   hltdc.Init.AccumulatedActiveW = 533;
  13.   hltdc.Init.TotalHeigh = 285;
  14.   hltdc.Init.TotalWidth = 565;
  15.   
  16.   /* background value */
  17.   hltdc.Init.Backcolor.Blue = 0;
  18.   hltdc.Init.Backcolor.Green = 0;
  19.   hltdc.Init.Backcolor.Red = 0;  
  20.   
  21.   /* Polarity */
  22.   hltdc.Init.HSPolarity = LTDC_HSPOLARITY_AL;
  23.   hltdc.Init.VSPolarity = LTDC_VSPOLARITY_AL;
  24.   hltdc.Init.DEPolarity = LTDC_DEPOLARITY_AL;  
  25.   hltdc.Init.PCPolarity = LTDC_PCPOLARITY_IPC;
  26.   hltdc.Instance = LTDC;
  27.   
  28.   HAL_LTDC_Init(&hltdc);
  29.   HAL_LTDC_ProgramLineEvent(&hltdc, 0);
  30.   
  31.   /* Enable dithering */
  32.   HAL_LTDC_EnableDither(&hltdc);
  33.    
  34.    /* Configure the DMA2D default mode */
  35.   hdma2d.Init.Mode         = DMA2D_R2M;
  36.   hdma2d.Init.ColorMode    = DMA2D_RGB565;
  37.   hdma2d.Init.OutputOffset = 0x0;     

  38.   hdma2d.Instance          = DMA2D;

  39.   if(HAL_DMA2D_Init(&hdma2d) != HAL_OK)
  40.   {
  41.     while (1);
  42.   }
  43.   
  44.   /* Assert display enable LCD_DISP pin */
  45.   HAL_GPIO_WritePin(GPIOI, GPIO_PIN_12, GPIO_PIN_SET);

  46.   /* Assert backlight LCD_BL_CTRL pin */
  47.   HAL_GPIO_WritePin(GPIOK, GPIO_PIN_3, GPIO_PIN_SET);

  48. }
复制代码

在使用GUI之前,要GUI_Init();函数,对ST enWin 的库进行初始化,并使用WM_SetCreateFlags(WM_CF_MEMDEV);激活存储设备。

完成上述的工作,就可以在工程中调用ST emWin的API函数了。

如,在LCD上显示Hello World。

清屏,清除LCD为黑色的背景色。

  1. GUI_Clear();
复制代码

设置GUI的字体为GUI_Font20_1。

  1. GUI_SetFont(&GUI_Font20_1);
复制代码

这里有很多的字体可以使用的。

使用GUI_DispStringAt函数显示字符串。

这个函数的第一个参数是要显示的字符串,后两个参数是要显示字符串的位置。

  1. GUI_DispStringAt("Hello world!", (LCD_GetXSize()-100)/2, (LCD_GetYSize()-20)/2);
复制代码

程序运行结果:

ee.png


收藏 6 评论17 发布时间:2016-6-27 10:39

举报

17个回答
jinyi7016 回答时间:2016-6-28 16:24:55
moyanming2013 回答时间:2016-11-7 11:00:00
shanji 发表于 2016-6-28 15:53
意法半导体什么时候向STM32客户免费提供TouchGFX软件

还不如用STemWin
shanji 回答时间:2016-6-28 15:53:57
意法半导体什么时候向STM32客户免费提供TouchGFX软件
秋而实之 回答时间:2016-6-27 16:34:16
支持下。。。。。。。。。。。。。。
yanhaijian 回答时间:2016-6-28 15:32:11
成功移植,恭喜。
kaierwen 回答时间:2016-6-28 16:10:11
kaierwen 回答时间:2016-6-28 16:10:13
yydty1025-29933 回答时间:2016-7-13 20:38:47
:):)
assssdz 回答时间:2016-11-4 23:39:15
:)
assssdz 回答时间:2016-11-4 23:40:48
peter001 回答时间:2016-11-4 23:59:20
很好的介绍
andypanfan 回答时间:2016-11-7 10:04:38
:):):)
harvardx 回答时间:2016-11-7 10:49:35
不错 .等我拿到769 discovery 也来试玩一下
zbber 回答时间:2016-11-7 11:08:48
成功移植,恭喜
12下一页
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版