
使用的是stm32f429ZGT6 ,如何根据数据手册配置LTDC
资源
配置
屏幕参数,这个屏幕的显示屏驱动芯片采用的是ST7265



void MX_LTDC_Init(void) { LTDC_LayerCfgTypeDef pLayerCfg = {0}; 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 = 4; hltdc.Init.VerticalSync = 4; hltdc.Init.AccumulatedHBP = 8; hltdc.Init.AccumulatedVBP = 16; hltdc.Init.AccumulatedActiveW = 808; hltdc.Init.AccumulatedActiveH = 496; hltdc.Init.TotalWidth = 816; hltdc.Init.TotalHeigh = 512; hltdc.Init.Backcolor.Blue = 0; hltdc.Init.Backcolor.Green = 0; hltdc.Init.Backcolor.Red = 0; /* 下面这个配置是按照野火的配置的 实际跑起来没差 */ // hltdc.Init.HorizontalSync = 3; // hltdc.Init.VerticalSync = 3; // hltdc.Init.AccumulatedHBP = 11; // hltdc.Init.AccumulatedVBP = 19; // hltdc.Init.AccumulatedActiveW = 811; // hltdc.Init.AccumulatedActiveH = 499; // hltdc.Init.TotalWidth = 819; // hltdc.Init.TotalHeigh = 515; // 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 = 800; pLayerCfg.WindowY0 = 0; pLayerCfg.WindowY1 = 480; pLayerCfg.PixelFormat = LTDC_PIXEL_FORMAT_RGB565; pLayerCfg.Alpha = 255; pLayerCfg.Alpha0 = 0; pLayerCfg.BlendingFactor1 = LTDC_BLENDING_FACTOR1_CA; pLayerCfg.BlendingFactor2 = LTDC_BLENDING_FACTOR2_CA; pLayerCfg.FBStartAdress = (uint32_t)FRAME_BUFFER; pLayerCfg.ImageWidth = 800; pLayerCfg.ImageHeight = 480; pLayerCfg.Backcolor.Blue = 0; pLayerCfg.Backcolor.Green = 0; pLayerCfg.Backcolor.Red = 0; if (HAL_LTDC_ConfigLayer(&hltdc, &pLayerCfg, 0) != HAL_OK) { Error_Handler(); } // HAL_LTDC_ProgramLineEvent(&hltdc, 0); // 参数是行号,0表示在垂直消隐开始产生中断 // __HAL_LTDC_ENABLE_IT(&hltdc, LTDC_IT_LI); // 使能行中断 // // 启动LTDC // __HAL_LTDC_ENABLE(&hltdc); }如何配置
// 按照野火的LTDC配置 https://doc.embedfire.com/mcu/stm32/f767tiaozhanzhe/hal/zh/latest/doc/chapter26/chapter26.html /** * @brief LTDC Init structure definition */typedef struct{ uint32_t HSPolarity; /*配置行同步信号HSYNC的极性 */ uint32_t VSPolarity; /*配置垂直同步信号VSYNC的极性 */ uint32_t DEPolarity; /*配置数据使能信号DE的极性*/ uint32_t PCPolarity; /*配置像素时钟信号CLK的极性 */ uint32_t HorizontalSync; /*配置行同步信号HSYNC的宽度(HSW-1) */ uint32_t VerticalSync; /*配置垂直同步信号VSYNC的宽度(VSW-1) */ uint32_t AccumulatedHBP; /*配置(HSW+HBP-1)的值*/ uint32_t AccumulatedVBP; /*配置(VSW+VBP-1)的值*/ uint32_t AccumulatedActiveW; /*配置(HSW+HBP+有效宽度-1)的值*/ uint32_t AccumulatedActiveH; /*配置(VSW+VBP+有效高度-1)的值*/ uint32_t TotalWidth; /*配置(HSW+HBP+有效宽度+HFP-1)的值*/ uint32_t TotalHeigh; /*配置(VSW+VBP+有效高度+VFP-1)的值*/ uint32_t Backcolor; /*配置背景颜色值*/ } LTDC_InitTypeDef; // 那么根据数据手册的数据可得 HSW = 4 VSW = 4 HBP = 8 VBP = 16 HFP = 8 VFP = 16 // hltdc.Init.HorizontalSync = 3; // hltdc.Init.VerticalSync = 3; // hltdc.Init.AccumulatedHBP = 11; // hltdc.Init.AccumulatedVBP = 19; // hltdc.Init.AccumulatedActiveW = 811; // hltdc.Init.AccumulatedActiveH = 499; // hltdc.Init.TotalWidth = 819; // hltdc.Init.TotalHeigh = 515; // hltdc.Init.Backcolor.Blue = 0; // hltdc.Init.Backcolor.Green = 0; // hltdc.Init.Backcolor.Red = 0;如果直接将数据手册的直接抄过来 hltdc.Init.HorizontalSync = 4; hltdc.Init.VerticalSync = 4; hltdc.Init.AccumulatedHBP = 8; hltdc.Init.AccumulatedVBP = 16; hltdc.Init.AccumulatedActiveW = 808; hltdc.Init.AccumulatedActiveH = 496; hltdc.Init.TotalWidth = 816; hltdc.Init.TotalHeigh = 512; hltdc.Init.Backcolor.Blue = 0; hltdc.Init.Backcolor.Green = 0; hltdc.Init.Backcolor.Red = 0; 对比发现,这个值和数据手册给定的值,都能对得上,说明可以直接抄过来,也是没问题的
实际测试
这两者配置,在运行的时候,没有什么大的不同
参考链接
#好好学习!