/* DMA2D init function */ void MX_DMA2D_Init(void) { hdma2d.Instance = DMA2D; hdma2d.Init.Mode = DMA2D_R2M; hdma2d.Init.ColorMode = DMA2D_OUTPUT_ARGB8888; hdma2d.Init.OutputOffset = 0; hdma2d.Init.BytesSwap = DMA2D_BYTES_REGULAR; hdma2d.Init.LineOffsetMode = DMA2D_LOM_PIXELS; 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; hdma2d.LayerCfg[1].AlphaInverted = DMA2D_REGULAR_ALPHA; hdma2d.LayerCfg[1].RedBlueSwap = DMA2D_RB_REGULAR; hdma2d.LayerCfg[1].ChromaSubSampling = DMA2D_NO_CSS; // hdma2d.LayerCfg[0].InputOffset = 0; // hdma2d.LayerCfg[0].InputColorMode = DMA2D_INPUT_ARGB8888; // hdma2d.LayerCfg[0].AlphaMode = DMA2D_NO_MODIF_ALPHA; // hdma2d.LayerCfg[0].InputAlpha = 0; // hdma2d.LayerCfg[0].AlphaInverted = DMA2D_REGULAR_ALPHA; // hdma2d.LayerCfg[0].RedBlueSwap = DMA2D_RB_REGULAR; // hdma2d.LayerCfg[0].ChromaSubSampling = DMA2D_NO_CSS; if (HAL_DMA2D_Init(&hdma2d) != HAL_OK) { Error_Handler(); } if (HAL_DMA2D_ConfigLayer(&hdma2d, 1) != HAL_OK) { Error_Handler(); } } /* LTDC init function */ void MX_LTDC_Init(void) { LTDC_LayerCfgTypeDef pLayerCfg = {0}; LTDC_LayerCfgTypeDef pLayerCfg1 = {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 = 19; hltdc.Init.VerticalSync = 9; hltdc.Init.AccumulatedHBP = 65; hltdc.Init.AccumulatedVBP = 32; hltdc.Init.AccumulatedActiveW = 865; hltdc.Init.AccumulatedActiveH = 512; hltdc.Init.TotalWidth = 1075; hltdc.Init.TotalHeigh = 534; 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_ARGB8888; pLayerCfg.Alpha = 255; pLayerCfg.Alpha0 = 0; pLayerCfg.BlendingFactor1 = LTDC_BLENDING_FACTOR1_PAxCA; pLayerCfg.BlendingFactor2 = LTDC_BLENDING_FACTOR2_PAxCA; pLayerCfg.FBStartAdress = 0xC0000000; 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(); } // pLayerCfg1.WindowX0 = 0; // pLayerCfg1.WindowX1 = 800; // pLayerCfg1.WindowY0 = 0; // pLayerCfg1.WindowY1 = 480; // pLayerCfg1.Alpha = 255; // pLayerCfg1.Alpha0 = 0; // pLayerCfg1.BlendingFactor1 = LTDC_BLENDING_FACTOR1_PAxCA; // pLayerCfg1.BlendingFactor2 = LTDC_BLENDING_FACTOR2_PAxCA; // pLayerCfg1.FBStartAdress = 0xC0177000; // pLayerCfg1.ImageWidth = 0; // pLayerCfg1.ImageHeight = 480; // pLayerCfg1.Backcolor.Blue = 0; // pLayerCfg1.Backcolor.Green = 0; // pLayerCfg1.Backcolor.Red = 0; // if (HAL_LTDC_ConfigLayer(&hltdc, &pLayerCfg1, 1) != HAL_OK) // { // Error_Handler(); // } HAL_LTDC_ProgramLineEvent(&hltdc, 0); /* Enable dithering */ HAL_LTDC_EnableDither(&hltdc); } void HAL_LTDC_MspInit(LTDC_HandleTypeDef* ltdcHandle) { GPIO_InitTypeDef GPIO_InitStruct = {0}; if(ltdcHandle->Instance==LTDC) { /* USER CODE BEGIN LTDC_MspInit 0 */ // /* USER CODE END LTDC_MspInit 0 */ /* LTDC clock enable */ __HAL_RCC_LTDC_CLK_ENABLE(); __HAL_RCC_GPIOK_CLK_ENABLE(); __HAL_RCC_GPIOG_CLK_ENABLE(); __HAL_RCC_GPIOJ_CLK_ENABLE(); __HAL_RCC_GPIOD_CLK_ENABLE(); __HAL_RCC_GPIOE_CLK_ENABLE(); __HAL_RCC_GPIOI_CLK_ENABLE(); __HAL_RCC_GPIOH_CLK_ENABLE(); /**LTDC GPIO Configuration PK5 ------> LTDC_B6 PG10 ------> LTDC_G3 PK4 ------> LTDC_B5 PJ15 ------> LTDC_B3 PD3 ------> LTDC_G7 PK6 ------> LTDC_B7 PK3 ------> LTDC_B4 PG12 ------> LTDC_B1 PE5 ------> LTDC_G0 PE4 ------> LTDC_B0 PK7 ------> LTDC_DE PG13 ------> LTDC_R0 PJ14 ------> LTDC_B2 PE6 ------> LTDC_G1 PI11 ------> LTDC_G6 PG7 ------> LTDC_CLK PG6 ------> LTDC_R7 PI12 ------> LTDC_HSYNC PI13 ------> LTDC_VSYNC PK0 ------> LTDC_G5 PJ0 ------> LTDC_R1 PH4 ------> LTDC_G4 PI15 ------> LTDC_G2 PJ1 ------> LTDC_R2 PJ5 ------> LTDC_R6 PJ2 ------> LTDC_R3 PJ3 ------> LTDC_R4 PJ4 ------> LTDC_R5 */ GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_4|GPIO_PIN_6|GPIO_PIN_3 |GPIO_PIN_7|GPIO_PIN_0; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF14_LTDC; HAL_GPIO_Init(GPIOK, &GPIO_InitStruct); GPIO_InitStruct.Pin = GPIO_PIN_10; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF9_LTDC; HAL_GPIO_Init(GPIOG, &GPIO_InitStruct); GPIO_InitStruct.Pin = GPIO_PIN_15|GPIO_PIN_14|GPIO_PIN_0|GPIO_PIN_1 |GPIO_PIN_5|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF14_LTDC; HAL_GPIO_Init(GPIOJ, &GPIO_InitStruct); GPIO_InitStruct.Pin = GPIO_PIN_3; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF14_LTDC; HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); GPIO_InitStruct.Pin = GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_7|GPIO_PIN_6; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF14_LTDC; HAL_GPIO_Init(GPIOG, &GPIO_InitStruct); GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_4|GPIO_PIN_6; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF14_LTDC; HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); GPIO_InitStruct.Pin = GPIO_PIN_11|GPIO_PIN_15; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF9_LTDC; HAL_GPIO_Init(GPIOI, &GPIO_InitStruct); GPIO_InitStruct.Pin = GPIO_PIN_12|GPIO_PIN_13; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF14_LTDC; HAL_GPIO_Init(GPIOI, &GPIO_InitStruct); GPIO_InitStruct.Pin = GPIO_PIN_4; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF14_LTDC; HAL_GPIO_Init(GPIOH, &GPIO_InitStruct); /* LTDC interrupt Init */ HAL_NVIC_SetPriority(LTDC_IRQn, 0, 0); HAL_NVIC_EnableIRQ(LTDC_IRQn); /* USER CODE BEGIN LTDC_MspInit 1 */ // /* USER CODE END LTDC_MspInit 1 */ } } void UpdateGui(void) { GUI_Init(); WM_MOTION_Enable(1); WM_MULTIBUF_Enable(1); WM_SetCreateFlags(WM_CF_MEMDEV); GUI_Clear(); while(1) { GUI_SetColor(GUI_GREEN); GUI_SetFont(GUI_FONT_D80); GUI_DispDecAt(Count,100,100,6); GUI_SetColor(GUI_RED); GUI_SetFont(GUI_FONT_D80); GUI_DispDecAt(Count,100,200,6); Count++; if(Count > 1000) Count = 0; GUI_SetColor(GUI_BLUE); GUI_FillRect(0,0,800,480); GUI_Exec(); GUI_Delay(100); }