terencejia 发表于 2016-8-3 08:32:13

在STM32F429上使用ST-emWin创建三个图层

在学习ST-emWin多图层的时候,大多数例子都是双图层,尝试配置三图层,做了如下改动:
1、把最大层数GUI_NUM_LAYERS定义为3;

2、为第三层分配内存空间

3、在LCD_LL_LayerInit中添加对第三层的初始化

4、在LCD_X_Config函数中添加第三层的配置
#if (GUI_NUM_LAYERS > 2)
    /* Set display driver and color conversion for 3nd layer */
    GUI_DEVICE_CreateAndLink(DISPLAY_DRIVER_2, COLOR_CONVERSION_2, 0, 2);
    /* Set size of 3nd layer */
    if (LCD_GetSwapXYEx(2)) {
      LCD_SetSizeEx (2, XSIZE_PHYS_LAYER3, YSIZE_PHYS_LAYER3);
      LCD_SetVSizeEx(2, XSIZE_PHYS_LAYER3, YSIZE_PHYS_LAYER3 * NUM_VSCREENS);
    } else {
      LCD_SetSizeEx (2, XSIZE_PHYS_LAYER3, YSIZE_PHYS_LAYER3);
      LCD_SetVSizeEx(2, XSIZE_PHYS_LAYER3, YSIZE_PHYS_LAYER3 * NUM_VSCREENS);
    }
    LCD_SetVisEx(2, 1);
#endif


编译完成后下载到stm32f429板子上运行,结果发现LCD_X_DisplayDriver函数只能接收到第一和第二层的消息,而没有对第三层的响应,比如
case LCD_X_INITCONTROLLER:
    LCD_LL_LayerInit(LayerIndex);
    break;

以及
case LCD_X_SETVIS:
    if(((LCD_X_SETVIS_INFO *)pData)->OnOff== ENABLE )
    {
      __HAL_LTDC_LAYER_ENABLE(&hltdc, LayerIndex);
    }
    else
    {
      __HAL_LTDC_LAYER_DISABLE(&hltdc, LayerIndex);
    }
    __HAL_LTDC_RELOAD_CONFIG(&hltdc);
    break;

导致第三层无法正常工作。

请高手帮忙分析一下,是不是还有什么地方没有配置对?如何实现三图层显示?

PS:在emwin模拟器上能够成功实现三图层,LCD_X_Config里的配置一样。

terencejia 发表于 2016-8-3 13:54:02

原因找到了,是stm32f429只支持两层显示:L

terencejia 发表于 2016-8-3 09:23:13

自己顶一下
页: [1]
查看完整版本: 在STM32F429上使用ST-emWin创建三个图层