随着HMI(人机交互)需求升级,基于Cortex-M7/M4双核架构的STM32H745(主频480MHz)凭借其Chrom-ART加速器和硬件图形外设,成为图形化嵌入式系统的热门选择。本次评测选取官方自带得LCD. 核心代码配置如下: void LCD_Config(void) { RCC_PeriphCLKInitTypeDef periph_clk_init_struct; LTDC_LayerCfgTypeDef pLayerCfg; /* LTDC Initialization -------------------------------------------------------*/ /*## LTDC时钟配置 ###########################################*/ /* RK043FN48H LCD clock configuration */ /* LCD clock configuration */ /* PLL3_VCO Input = HSE_VALUE/PLL3M = 5 Mhz */ /* PLL3_VCO Output = PLL3_VCO Input * PLL3N = 800 Mhz */ /* PLLLCDCLK = PLL3_VCO Output/PLL3R = 800/83 = 9.63 Mhz */ /* LTDC clock frequency = PLLLCDCLK = 9.63 Mhz */ periph_clk_init_struct.PeriphClockSelection = RCC_PERIPHCLK_LTDC; periph_clk_init_struct.PLL3.PLL3M = 5; periph_clk_init_struct.PLL3.PLL3N = 160; periph_clk_init_struct.PLL3.PLL3FRACN = 0; periph_clk_init_struct.PLL3.PLL3P = 2; periph_clk_init_struct.PLL3.PLL3Q = 2; periph_clk_init_struct.PLL3.PLL3R = 83; periph_clk_init_struct.PLL3.PLL3VCOSEL = RCC_PLL3VCOWIDE; periph_clk_init_struct.PLL3.PLL3RGE = RCC_PLL3VCIRANGE_2; HAL_RCCEx_PeriphCLKConfig(&periph_clk_init_struct); /* LTDC Initialization -------------------------------------------------------*/ /* DeInit */ hltdc_F.Instance = LTDC; HAL_LTDC_DeInit(&hltdc_F); /* Polarity configuration */ /* Initialize the horizontal synchronization polarity as active low */ hltdc_F.Init.HSPolarity = LTDC_HSPOLARITY_AL; /* Initialize the vertical synchronization polarity as active low */ hltdc_F.Init.VSPolarity = LTDC_VSPOLARITY_AL; /* Initialize the data enable polarity as active low */ hltdc_F.Init.DEPolarity = LTDC_DEPOLARITY_AL; /* Initialize the pixel clock polarity as input pixel clock */ hltdc_F.Init.PCPolarity = LTDC_PCPOLARITY_IPC; /* Timing configuration */ /* The LCD AMPIRE 640x480 is selected */ /* Timing configuration */ hltdc_F.Init.HorizontalSync = (RK043FN48H_HSYNC - 1);//水平同步宽度。 hltdc_F.Init.VerticalSync = (RK043FN48H_VSYNC - 1);//垂直同步高度 hltdc_F.Init.AccumulatedHBP = (RK043FN48H_HSYNC + RK043FN48H_HBP - 1);//水平宽度 hltdc_F.Init.AccumulatedVBP = (RK043FN48H_VSYNC + RK043FN48H_VBP - 1); //垂直高度。 hltdc_F.Init.AccumulatedActiveH = (RK043FN48H_HEIGHT + RK043FN48H_VSYNC + RK043FN48H_VBP - 1); hltdc_F.Init.AccumulatedActiveW = (RK043FN48H_WIDTH + RK043FN48H_HSYNC + RK043FN48H_HBP - 1); hltdc_F.Init.TotalHeigh = (RK043FN48H_HEIGHT + RK043FN48H_VSYNC + RK043FN48H_VBP + RK043FN48H_VFP - 1); hltdc_F.Init.TotalWidth = (RK043FN48H_WIDTH + RK043FN48H_HSYNC + RK043FN48H_HBP + RK043FN48H_HFP - 1); /* Configure R,G,B component values for LCD background color */ hltdc_F.Init.Backcolor.Blue = 0; hltdc_F.Init.Backcolor.Green = 0; hltdc_F.Init.Backcolor.Red = 0; hltdc_F.Instance = LTDC; /* Layer1 Configuration ------------------------------------------------------*/ /* Windowing configuration */ /* In this case all the active display area is used to display a picture then : Horizontal start = horizontal synchronization + Horizontal back porch = 43 Vertical start = vertical synchronization + vertical back porch = 12 Horizontal stop = Horizontal start + window width -1 = 43 + 480 -1 Vertical stop = Vertical start + window height -1 = 12 + 272 -1 */ pLayerCfg.WindowX0 = 0; pLayerCfg.WindowX1 = 480; pLayerCfg.WindowY0 = 0; pLayerCfg.WindowY1 = 272; /* Pixel Format configuration*/ pLayerCfg.PixelFormat = LTDC_PIXEL_FORMAT_RGB565; /* Start Address configuration : frame buffer is located at FLASH memory */ pLayerCfg.FBStartAdress = (uint32_t)&RGB565_480x272; /* Alpha constant (255 == totally opaque) */ pLayerCfg.Alpha = 255; /* Default Color configuration (configure A,R,G,B component values) : no background color */ pLayerCfg.Alpha0 = 0; /* fully transparent */ pLayerCfg.Backcolor.Blue = 0; pLayerCfg.Backcolor.Green = 0; pLayerCfg.Backcolor.Red = 0; /* Configure blending factors */ pLayerCfg.BlendingFactor1 = LTDC_BLENDING_FACTOR1_CA; pLayerCfg.BlendingFactor2 = LTDC_BLENDING_FACTOR2_CA; /* Configure the number of lines and number of pixels per line */ pLayerCfg.ImageWidth = 480; pLayerCfg.ImageHeight = 272; /* Configure the LTDC */ if(HAL_LTDC_Init(&hltdc_F) != HAL_OK) { /* Initialization Error */ Error_Handler(); } /* Configure the Layer*/ if(HAL_LTDC_ConfigLayer(&hltdc_F, &pLayerCfg, 1) != HAL_OK) { /* Initialization Error */ Error_Handler(); }
} 下载代码,显示效果如下:
|