ST意法半导体
直播中

刘丽

7年用户 1252经验值
私信 关注
[问答]

STM32F469 Disovery板新显示器的开机顺序是怎样的

我希望有一个人可以帮助我。经过几天阅读文档、其他问题等等,我仍然对所有 LTDC 和 DSI 的工作原理感到困惑。
好的,所以我有一个 STM32F469 Disovery 板,上面已经有一个显示器。
我在 touchgfx 中创建了一个项目,其中只有一个蓝屏和四个角落的白框。
在IDE中打开我可以上传它并且它可以工作。难怪,都是原创。
现在我使用相同的 FPC 连接器更换了显示器。我正在使用一个小型 PCB 来更换电线以匹配新显示器的规格。
它也是 2 通道 DSI。
作为程序“模板”,我仍然使用 469-disco 之一
我删除了所有 otm8009a 的东西,并使用 HX8363 而不是 OTM8009a 的新显示器的开机顺序
  • HAL_DSI_ShortWrite(&hdsi, 0x00, DSI_DCS_SHORT_PKT_WRITE_P1, 0x11, 0x00);
  • HAL_Delay(201);
  • uint8_t enExtCmd[5] = {0xFF, 0x83, 0x63};
  • HAL_DSI_LongWrite(&hdsi, 0x00, DSI_DCS_LONG_PKT_WRITE, 4, 0xB9, enExtCmd);
  • uint8_t setLaneNumer[15] ={0x80, 0x00, 0x10, 0x08, 0x08, 0x10, 0x7E, 0x6E, 0x6D, 0x0A, 0x01, 0x80, 0x43};
  • HAL_DSI_LongWrite(&hdsi,  0x00, DSI_DCS_LONG_PKT_WRITE, 14, 0xBA, setLaneNumer);
  • HAL_DSI_ShortWrite(&hdsi, 0x00, DSI_DCS_SHORT_PKT_WRITE_P1, 0x36, 0x00);
  • HAL_Delay(7);
  • HAL_DSI_ShortWrite(&hdsi, 0x00, DSI_DCS_SHORT_PKT_WRITE_P1, 0xCC, 0x0B);
  • HAL_Delay(11);
  • HAL_DSI_ShortWrite(&hdsi,  0x00, DSI_DCS_SHORT_PKT_WRITE_P1, 0x29, 0x00);

在不知道自己在做什么的情况下尝试了无数次尝试后,我的显示屏显示了一些东西。对我来说,这是一个巨大的成功。我打开 IOC 将 touchgfx 接口更改为 Parallel RGB (LTDC) 并将 Driver 更改为 LTDC。
DSI 主机到视频模式。
数据表:
  • - 4.0 inch diagonal display, 480 x RGB [H] x 800 [V] dots.
  • - 24bitRGB ( 8-8-8 Format ) / 16.7 Million colors.
  • - MIPI DSI as high-speed interface. Video mode only.
到目前为止,一切都很好。我认为现在很容易获得时间和所有其他参数。只需使用数据表并使用 IOC 配置将值放入正确的参数中。
在这里,我开始阅读许多关于 LTDC、DSI 等的文档。但是还是不明白。
所以显示器是 4.0" WVGA 480 x RGB x 800 Portrait
在数据表的尺寸部分有“点数”1440[H] x 800[V]。那是需要调整的重要东西还是由 IC 驱动器 HX8363 控制?
时间安排呢?在其他人在他们的问题中发布的所有数据表中,对我没有帮助,“项目”和“符号”是不同的,所以似乎每个制造商都使用不同的功能命名。
就我而言:

和:

这是我的显示器实际显示的内容:

使用此设置:
  • static void MX_DMA2D_Init(void)
  • {
  •   hdma2d.Instance = DMA2D;
  •   hdma2d.Init.Mode = DMA2D_M2M;
  •   hdma2d.Init.ColorMode = DMA2D_OUTPUT_ARGB8888;
  •   hdma2d.Init.OutputOffset = 0;
  •   hdma2d.LayerCfg[1].InputOffset = 0;
  •   hdma2d.LayerCfg[1].InputColorMode = DMA2D_INPUT_ARGB8888;
  •   hdma2d.LayerCfg[1].AlphaMode = DMA2D_NO_MODIF_ALPHA;
  •   hdma2d.LayerCfg[1].InputAlpha = 0;
  •   if (HAL_DMA2D_Init(&hdma2d) != HAL_OK)
  •   {
  •     Error_Handler();
  •   }
  •   if (HAL_DMA2D_ConfigLayer(&hdma2d, 1) != HAL_OK)
  •   {
  •     Error_Handler();
  •   }
  • }
  • static void MX_DSIHOST_DSI_Init(void)
  • {
  •   /* USER CODE BEGIN DSIHOST_Init 0 */
  •   /* Activate XRES active low */
  •   HAL_Delay(20); /* wait 20 ms */
  •   HAL_GPIO_WritePin(GPIOH, GPIO_PIN_7, GPIO_PIN_RESET);
  •   HAL_Delay(20); /* wait 20 ms */
  •   /* Desactivate XRES */
  •   HAL_GPIO_WritePin(GPIOH, GPIO_PIN_7, GPIO_PIN_SET);
  •   /* Wait for 11ms after releasing XRES before sending commands */
  •   HAL_Delay(11);
  •   /* USER CODE END DSIHOST_Init 0 */
  •   DSI_PLLInitTypeDef PLLInit = {0};
  •   DSI_HOST_TimeoutTypeDef HostTimeouts = {0};
  •   DSI_PHY_TimerTypeDef PhyTimings = {0};
  •   DSI_VidCfgTypeDef VidCfg = {0};
  •   hdsi.Instance = DSI;
  •   hdsi.Init.AutomaticClockLaneControl = DSI_AUTO_CLK_LANE_CTRL_DISABLE;
  •   hdsi.Init.TXEscapeCkdiv = 4;
  •   hdsi.Init.NumberOfLanes = DSI_TWO_DATA_LANES;
  •   PLLInit.PLLNDIV = 125;
  •   PLLInit.PLLIDF = DSI_PLL_IN_DIV2;
  •   PLLInit.PLLODF = DSI_PLL_OUT_DIV1;
  •   if (HAL_DSI_Init(&hdsi, &PLLInit) != HAL_OK)
  •   {
  •     Error_Handler();
  •   }
  •   HostTimeouts.TimeoutCkdiv = 1;
  •   HostTimeouts.HighSpeedTransmissionTimeout = 0;
  •   HostTimeouts.LowPowerReceptionTimeout = 0;
  •   HostTimeouts.HighSpeedReadTimeout = 0;
  •   HostTimeouts.LowPowerReadTimeout = 0;
  •   HostTimeouts.HighSpeedWriteTimeout = 0;
  •   HostTimeouts.HighSpeedWritePrespMode = DSI_HS_PM_DISABLE;
  •   HostTimeouts.LowPowerWriteTimeout = 0;
  •   HostTimeouts.BTATimeout = 0;
  •   if (HAL_DSI_ConfigHostTimeouts(&hdsi, &HostTimeouts) != HAL_OK)
  •   {
  •     Error_Handler();
  •   }
  •   PhyTimings.ClockLaneHS2LPTime = 28;
  •   PhyTimings.ClockLaneLP2HSTime = 33;
  •   PhyTimings.DataLaneHS2LPTime = 15;
  •   PhyTimings.DataLaneLP2HSTime = 25;
  •   PhyTimings.DataLaneMaxReadTime = 0;
  •   PhyTimings.StopWaitTime = 0;
  •   if (HAL_DSI_ConfigPhyTimer(&hdsi, &PhyTimings) != HAL_OK)
  •   {
  •     Error_Handler();
  •   }
  •   if (HAL_DSI_ConfigFlowControl(&hdsi, DSI_FLOW_CONTROL_BTA) != HAL_OK)
  •   {
  •     Error_Handler();
  •   }
  •   if (HAL_DSI_SetLowPowerRXFilter(&hdsi, 10000) != HAL_OK)
  •   {
  •     Error_Handler();
  •   }
  •   if (HAL_DSI_ConfigErrorMonitor(&hdsi, HAL_DSI_ERROR_NONE) != HAL_OK)
  •   {
  •     Error_Handler();
  •   }
  •   VidCfg.VirtualChannelID = 0;
  •   VidCfg.ColorCoding = DSI_RGB888;
  •   VidCfg.LooselyPacked = DSI_LOOSELY_PACKED_DISABLE;
  •   VidCfg.Mode = DSI_VID_MODE_NB_PULSES;
  •   VidCfg.PacketSize = 1;
  •   VidCfg.NumberOfChunks = 200;
  •   VidCfg.NullPacketSize = 0;
  •   VidCfg.HSPolarity = DSI_HSYNC_ACTIVE_LOW;
  •   VidCfg.VSPolarity = DSI_VSYNC_ACTIVE_LOW;
  •   VidCfg.DEPolarity = DSI_DATA_ENABLE_ACTIVE_HIGH;
  •   VidCfg.HorizontalSyncActive = 4;
  •   VidCfg.HorizontalBackPorch = 2;
  •   VidCfg.HorizontalLine = 425;
  •   VidCfg.VerticalSyncActive = 2;
  •   VidCfg.VerticalBackPorch = 1;
  •   VidCfg.VerticalFrontPorch = 1;
  •   VidCfg.VerticalActive = 480;
  •   VidCfg.LPCommandEnable = DSI_LP_COMMAND_DISABLE;
  •   VidCfg.LPLargestPacketSize = 0;
  •   VidCfg.LPVACTLargestPacketSize = 0;
  •   VidCfg.LPHorizontalFrontPorchEnable = DSI_LP_HFP_DISABLE;
  •   VidCfg.LPHorizontalBackPorchEnable = DSI_LP_HBP_DISABLE;
  •   VidCfg.LPVerticalActiveEnable = DSI_LP_VACT_DISABLE;
  •   VidCfg.LPVerticalFrontPorchEnable = DSI_LP_VFP_DISABLE;
  •   VidCfg.LPVerticalBackPorchEnable = DSI_LP_VBP_DISABLE;
  •   VidCfg.LPVerticalSyncActiveEnable = DSI_LP_VSYNC_DISABLE;
  •   VidCfg.FrameBTAAcknowledgeEnable = DSI_FBTAA_DISABLE;
  •   if (HAL_DSI_ConfigVideoMode(&hdsi, &VidCfg) != HAL_OK)
  •   {
  •     Error_Handler();
  •   }
  •   if (HAL_DSI_SetGenericVCID(&hdsi, 0) != HAL_OK)
  •   {
  •     Error_Handler();
  •   }
  • }
我必须在这里拆分,因为我无法发送“文本太大”的问题。



回帖(1)

李博

2022-12-13 15:54:33
现在尝试递减/递增 1


  • VidCfg.HorizontalSyncActive = 31;
  •   VidCfg.HorizontalBackPorch = 31;
  •   VidCfg.HorizontalLine = 1015;

和旋转镜像使用数据表注册命令...
举报

更多回帖

发帖
×
20
完善资料,
赚取积分