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

标签:STM32GUIemwin
分享到:

意法半导体STM32客户免费提供STemWin软件。该软件内置SEGGER VNC虚拟网络计算系统,可运用互联网协议远程查看用户界面。该软件还为开发人员提供其它强大的功能,其中包括窗口管理器和小工具包、触摸屏/鼠标支持,存储器上下文可实现无闪屏刷新。
目前StemWin并不提供源码,记得好像只有2.9以前的GUI才有源码,这里STemWin是以库的形式提供的。

GUI 1

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

GUI 2

GUIConf.c主要是配置显示缓存的大小 。
LCDConf.c主要是配置与LCD相关的参数与函数。
LCD-TFT(液晶显示器——薄膜晶体管)显示器控制器提供并行数字 RGB (红色、绿色、蓝色)以及水平同步、垂直同步、像素时钟和数据使能信号,这些信号直接输出到不同 LCD和 TFT面板的接口。
层混合:

GUI 3

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.   /* DeInit */
  3.   HAL_LTDC_DeInit(&hltdc);
  4.   
  5.   /* Set LCD Timings */
  6.   hltdc.Init.HorizontalSync = 40;
  7.   hltdc.Init.VerticalSync = 9;
  8.   hltdc.Init.AccumulatedHBP = 53;
  9.   hltdc.Init.AccumulatedVBP = 11;
  10.   hltdc.Init.AccumulatedActiveH = 283;
  11.   hltdc.Init.AccumulatedActiveW = 533;
  12.   hltdc.Init.TotalHeigh = 285;
  13.   hltdc.Init.TotalWidth = 565;
  14.   
  15.   /* background value */
  16.   hltdc.Init.Backcolor.Blue = 0;
  17.   hltdc.Init.Backcolor.Green = 0;
  18.   hltdc.Init.Backcolor.Red = 0;  
  19.   
  20.   /* Polarity */
  21.   hltdc.Init.HSPolarity = LTDC_HSPOLARITY_AL;
  22.   hltdc.Init.VSPolarity = LTDC_VSPOLARITY_AL; 
  23.   hltdc.Init.DEPolarity = LTDC_DEPOLARITY_AL;  
  24.   hltdc.Init.PCPolarity = LTDC_PCPOLARITY_IPC;
  25.   hltdc.Instance = LTDC;
  26.   
  27.   HAL_LTDC_Init(&hltdc);
  28.   HAL_LTDC_ProgramLineEvent(&hltdc, 0);
  29.   
  30.   /* Enable dithering */
  31.   HAL_LTDC_EnableDither(&hltdc);
  32.     
  33.    /* Configure the DMA2D default mode */ 
  34.   hdma2d.Init.Mode         = DMA2D_R2M;
  35.   hdma2d.Init.ColorMode    = DMA2D_RGB565;
  36.   hdma2d.Init.OutputOffset = 0x0;     
  37.  
  38.   hdma2d.Instance          = DMA2D; 
  39.  
  40.   if(HAL_DMA2D_Init(&hdma2d) != HAL_OK)
  41.   {
  42.     while (1);
  43.   }
  44.   
  45.   /* Assert display enable LCD_DISP pin */
  46.   HAL_GPIO_WritePin(GPIOI, GPIO_PIN_12, GPIO_PIN_SET);
  47.  
  48.   /* Assert backlight LCD_BL_CTRL pin */
  49.   HAL_GPIO_WritePin(GPIOK, GPIO_PIN_3, GPIO_PIN_SET);
  50.  
  51. }

在使用GUI之前,要GUI_Init();函数,对ST emWin 的库进行初始化,并使用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);

程序运行结果:

GUI 4

 

相关推荐:

STM32单片机官方开发工具一览

STM32评估开发板列表

ARM Cortex-M内核STM32单片机产品全览

STM32微控制器参考设计

 

 

 

 

 
 
继续阅读
意法半导体推出48引脚封装 扩大市面上唯一支持LoRa®的STM32WL系统芯片的选择范围

中国,2020年8月28日——意法半导体为其获奖产品STM32WLE5 *无线系统芯片(SoC)的产品组合新增一款QFN48封装,将该产品的诸多集成功能、能效性和多调制的灵活性赋能到多种工业无线应用上。

意法半导体发布STM32状态监测功能包,通过Cartesiam工具简化机器学习过程

中国,2020年7月29日——意法半导体发布一款免费的STM32软件功能包,让用户可以用微控制器探索套件快速创建、训练、部署工业状态监测智能边缘设备。

意法半导体为STM32Cube®生态系统增添新功能,提高软件开发效率

中国,2020年7月28日——意法半导体STM32Cube®软件开发生态系统发布软件更新,让用户更轻松地筛选软件示例,搜集和使用开发工具,自定义、使用和分享STM32Cube扩展软件包。

意法半导体通过两项并购,进一步增强STM32微控制器的无线连接功能

中国, 2020年7月20 日 – 横跨多重电子应用领域的全球领先的半导体供应商意法半导体,于日前宣布签署两项并购协议,收购超宽带技术专业设计公司BeSpoon的全部股本和Riot Micro公司的蜂窝物联网连接资产。在两项交易走完正常监管审批手续成交后,意法半导体将进一步提升其在无线连接技术方面的服务,特别是完善STM32微控制器和安全微控制器的产品规划。

让汽车ECU开发事半功倍,ST AutoDevKit工具包长啥样?

STM32 是工业和消费市场上非常成功的微控制器解决方案,SPC5 系列汽车微控制器也许大家还不大熟悉,不过在 AutoDevKit 生态匹配搭建的强大加持下,站在使用者的角度来看待问题,解决对方行业痛点,未来的 SPC5 也许可以成为汽车电子界的 STM32 也是很有可能的。