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

【评测站】怪兽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个回答
o律之o 回答时间:2016-6-27 16:34:16
支持下。。。。。。。。。。。。。。
yanhaijian 回答时间:2016-6-28 15:32:11
成功移植,恭喜。
shanji 回答时间:2016-6-28 15:53:57
意法半导体什么时候向STM32客户免费提供TouchGFX软件
kaierwen 回答时间:2016-6-28 16:10:11
kaierwen 回答时间:2016-6-28 16:10:13
jinyi7016 回答时间:2016-6-28 16:24:55
yydty1025-29933 回答时间:2016-7-13 20:38:47
:):)
asssdz-382474 回答时间:2016-11-4 23:39:15
:)
asssdz-382474 回答时间:2016-11-4 23:40:48
12下一页

所属标签

STM32团队

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


最新内容

相似技术帖

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