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

【STM32H745I-DISCO GuiDemo 】GuiDemo 适配LTDC驱动

[复制链接]
andey 发布时间:2025-2-24 19:36

简介

我们在之前适配FreeRTOS工程的基础上继续更新,添加LCD模块的显示功能验证。STM32H745I-DISCO 开发板上集成了4.3寸的TFT 480*272 的RGB显示屏幕(RK043FN88H-CT661C)。LCD屏幕连接到了了MCU 的LTDC IP,通过LTDC 模块来驱动LCD显示屏,对应原理图如下。

lcd_sch.png

lcd1.png

LCD 参数配置

lcd_para.png

格局上述参数配置LCD 工作频率为8~12M,按照典型值9M来配置

lcd_clock.png

根据上述timing 的参数表配置LCD 的垂直方向的同步参数配置,我们都按照推荐的典型值来配置。

layer1_config.png

配置LCD 工作模式控制GPIO,屏幕点亮需要拉高对应GPIO.

LCD_DSI.png

上述配置好时钟,gpio,及LCD参数信息,会生成如下的LCD配置函数,我们将frame_buff指向特定rgb数据即可完成LTDC的显示。



/**
  * @brief LTDC Initialization Function
  * @param None
  * @retval None
  */
static void MX_LTDC_Init(void)
{

  /* USER CODE BEGIN LTDC_Init 0 */

  /* USER CODE END LTDC_Init 0 */

  LTDC_LayerCfgTypeDef pLayerCfg = {0};

  /* USER CODE BEGIN LTDC_Init 1 */

  /* USER CODE END LTDC_Init 1 */
  hltdc.Instance = LTDC;
  hltdc.Init.HSPolarity = LTDC_HSPOLARITY_AL;
  hltdc.Init.VSPolarity = LTDC_VSPOLARITY_AL;
  hltdc.Init.DEPolarity = LTDC_DEPOLARITY_AL;
  hltdc.Init.PCPolarity = LTDC_PCPOLARITY_IPC;
  hltdc.Init.HorizontalSync = 3;
  hltdc.Init.VerticalSync = 3;
  hltdc.Init.AccumulatedHBP = 46;
  hltdc.Init.AccumulatedVBP = 15;
  hltdc.Init.AccumulatedActiveW = 526;
  hltdc.Init.AccumulatedActiveH = 287;
  hltdc.Init.TotalWidth = 534;
  hltdc.Init.TotalHeigh = 295;
  hltdc.Init.Backcolor.Blue = 0;
  hltdc.Init.Backcolor.Green = 0;
  hltdc.Init.Backcolor.Red = 0;
  if (HAL_LTDC_Init(&hltdc) != HAL_OK)
  {
    Error_Handler();
  }
  pLayerCfg.WindowX0 = 0;
  pLayerCfg.WindowX1 = 479;
  pLayerCfg.WindowY0 = 0;
  pLayerCfg.WindowY1 = 271;
  pLayerCfg.PixelFormat = LTDC_PIXEL_FORMAT_RGB565;
  pLayerCfg.Alpha = 255;
  pLayerCfg.Alpha0 = 100;
  pLayerCfg.BlendingFactor1 = LTDC_BLENDING_FACTOR1_CA;
  pLayerCfg.BlendingFactor2 = LTDC_BLENDING_FACTOR2_CA;
  pLayerCfg.FBStartAdress = (uint32_t)&RGB565_480x272;;
  pLayerCfg.ImageWidth = 480;
  pLayerCfg.ImageHeight = 272;
  pLayerCfg.Backcolor.Blue = 0;
  pLayerCfg.Backcolor.Green = 0;
  pLayerCfg.Backcolor.Red = 0;
  if (HAL_LTDC_ConfigLayer(&hltdc, &pLayerCfg, 0) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN LTDC_Init 2 */

  /* USER CODE END LTDC_Init 2 */

}

板子验证

在默认task 内添加如下测试代码以1S的周期,刷新显示FrameBuffer

/**
  * @brief  Function implementing the defaultTask thread.
  * @param  argument: Not used
  * @retval None
  */
/* USER CODE END Header_StartDefaultTask */
void StartDefaultTask(void *argument)
{
  /* USER CODE BEGIN 5 */
  /* Infinite loop */
  for(;;)
  { 
     HAL_LTDC_SetAddress(&hltdc, (uint32_t)&RGB565_480x272, 0);  
     HAL_LTDC_Reload( &hltdc,LTDC_RELOAD_IMMEDIATE);  
     vTaskDelay(1000);  
     HAL_LTDC_SetAddress(&hltdc, (uint32_t)&_acrgb565data, 0);  
     HAL_LTDC_Reload( &hltdc,LTDC_RELOAD_IMMEDIATE);  
     vTaskDelay(1000);  
  }
  /* USER CODE END 5 */
}

运行结果如下,从效果看刷新全屏显示还是很丝滑的,性能感人。20250224-201337.gif

至此已经完成了基础工程(uart 日志打印+ freertos)和底层LTDC的适配,下一步继续GUI DEMO试验适配LVGL.

收藏 评论0 发布时间:2025-2-24 19:36

举报

0个回答

所属标签

相似分享

官网相关资源

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