【STM32H743IIT6 系列】通过 LTDC接口驱动的 TFTLCD(RGB屏)显示

引言

SDRAM 配置

在开始此篇文章之前,首先要把 SDRAM 配置好,可以看我的上一篇文章:

【STM32H743IIT6 系列】将外部SDRAM作为内部RAM使用的超简单方法

没有将 SDRAM 作为内部 RAM 使用的朋友可以选择性看上面这篇文章。

屏幕

这里我使用的是正点原子的 800 * 480的 4.3寸 RGBLCD 屏幕,如下图所示:

98ca552929a8e47fb30dc98c01e27b74

CubeMX配置

时钟配置

可见最大时钟可以给到 50MHz,我们这里就给到 50MHz。

image

image

引脚配置

首先要注意的就是 MCU 引脚对应屏幕接口的 LTDC 引脚是否正确,我使用的是反客的 H743,下面是引脚对应图:
(还有 LTDC_BL 背光引脚需要我们自己定义,设置为高电平开漏输出上拉模式即可)
image

LTDC 配置

为了节省资源,我们使用的是 RGB565 模式:

image

Parameter Settings

image

Layer Settings

image

NVIC Settings

image

测试代码

点击查看代码
/* USER CODE BEGIN 0 */

uint16_t* fb_addr = (uint16_t*)((uint32_t)0xC0000000);
void LTDC_LCD_Fill(uint16_t* fb, uint16_t color, uint32_t length)
{
	uint16_t* tmp_fb = fb;
	for (uint32_t i = 0; i < length; i++) {
		*(tmp_fb + i) = color;
	}
}

/* USER CODE END 0 */

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{

  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MPU Configuration--------------------------------------------------------*/
  MPU_Config();

  /* Enable the CPU Cache */

  /* Enable I-Cache---------------------------------------------------------*/
  SCB_EnableICache();

  /* Enable D-Cache---------------------------------------------------------*/
  SCB_EnableDCache();

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_USART1_UART_Init();
  MX_FMC_Init();
  MX_LTDC_Init();
  /* USER CODE BEGIN 2 */

	Set_Current_USART(USART1_IDX);
	printf("SDRAM 初始化通过!\r\n");
	
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
	SCB_CleanInvalidateDCache();
	while (!(LTDC->CDSR & LTDC_CDSR_VSYNCS));
	LTDC_LCD_Fill(fb_addr, (uint16_t)0xF800, (uint32_t)480 * 800 * 2);
	HAL_Delay(100);
	  
	SCB_CleanInvalidateDCache();
	while (!(LTDC->CDSR & LTDC_CDSR_VSYNCS));
	LTDC_LCD_Fill(fb_addr, (uint16_t)0x07E0, (uint32_t)480 * 800 * 2);
	HAL_Delay(100);
	  
	SCB_CleanInvalidateDCache();
	while (!(LTDC->CDSR & LTDC_CDSR_VSYNCS));
	LTDC_LCD_Fill(fb_addr, (uint16_t)0x001F, (uint32_t)480 * 800 * 2);
	HAL_Delay(100);
	
	SCB_CleanInvalidateDCache();
	while (!(LTDC->CDSR & LTDC_CDSR_VSYNCS));
	LTDC_LCD_Fill(fb_addr, (uint16_t)0xFFFF, (uint32_t)480 * 800 * 2);
	HAL_Delay(100);


    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

效果

b99894a6738494a045e8358f82e10cff

8d3b33b6d7dd19d9a377fa1bf3d4aa27

博客导航

博客导航

posted @ 2025-10-23 13:05  膝盖中箭卫兵  阅读(19)  评论(0)    收藏  举报
ORCID iD icon https://orcid.org/0000-0001-5102-772X