一、
LTDC是一种屏幕驱动控制技术,在ST的一些MCU上会集成有LTDC控制器,能够驱动外部RGB565,RGB888等RGB屏幕,这种RGB屏驱动方式的优点主要是节省掉外部屏幕驱动IC,可以灵活驱动不同分辨率、不同颜色制式的RGB屏。以下将介绍使用LTDC驱动STM32H7S78-DK板载的5寸RGB屏幕,同时使用DMA2D来加快图像数据刷新
二、
cubeide新建app工程
工程命名
根据开发板原理图,在引脚视图中进行配置
PG15、PE15为背光和屏幕亮灭控制引脚,需要使能为高电平
引脚配置完成后进行LTDC参数设置,RGB屏幕型号为RK050HR18-CTG,找到其数据手册
(uint32_t)&image_array为存储图像的数组,数组可以存放在Flash中,也可以是SRAM,但SRAM读写速率比Flash更快
检查参数无误后,点击保存设置
三、
编译工程出现报错,原因是没有声明image_array数组
/* USER CODE BEGIN PV */ #define LCD_W 800 #define LCD_H 480 const uint32_t image_array[LCD_W*LCD_H]={[0 ... LCD_W*LCD_H-1]=0xFF00FFFF};//图片填充为CYAN /* USER CODE END PV */
声明大小为800*480的图片数组,并填充0xFF00FFFF
编译通过后烧录固件至开发板
四、使用DMA2D
使能DMA2D全局中断
定义图片GRAM显存,地址在外部SRAM
#define LCD_MemoryAdd 0x90000000 //显存起始地址 uint32_t image_sram[800*480] __attribute__((section(".EXTSRAM_ADDR")));
显存刷新
/* USER CODE BEGIN 0 */ void LCD_Update_DMA(uint32_t color) { uint8_t hal_status; while( LTDC->CDSR != 0X00000001); hal_status = HAL_DMA2D_Start_IT(&hdma2d, color, /* Color value in Register to Memory DMA2D mode */ (__IO uint32_t)( LCD_MemoryAdd), /* DMA2D output buffer */ LCD_W, /* width of buffer in pixels */ LCD_H); /* height of buffer in lines */ if (hal_status != HAL_OK) { Error_Handler(); } } /* USER CODE END 0 */
main函数调用
/* USER CODE BEGIN 2 */ LCD_Update_DMA(0xFF0F0F00); HAL_LTDC_SetAddress(&hltdc,(uint32_t)&image_sram,0); HAL_LTDC_Reload(&hltdc,LTDC_RELOAD_IMMEDIATE); HAL_Delay(800); uint32_t color=0xFF0F0F00; /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ if(color>0xF0FFFFFF) color=0xFF0F0F00; color+=30000; HAL_Delay(500); LCD_Update_DMA(color); } /* USER CODE END 3 */ }
五、实验结果