一、
LTDC是一种屏幕驱动控制技术,在ST的一些MCU上会集成有LTDC控制器,能够驱动外部RGB565,RGB888等RGB屏幕,这种RGB屏驱动方式的优点主要是节省掉外部屏幕驱动IC,可以灵活驱动不同分辨率、不同颜色制式的RGB屏。以下将介绍使用LTDC驱动STM32H7S78-DK板载的5寸RGB屏幕,同时使用DMA2D来加快图像数据刷新
二、
cubeide新建app工程
![1730645297452844.png ~)]%XB__YZ8M{HLLVJVXW`5.png](http://uphotos.eepw.com.cn/1709346044/pics/1730645297452844.png)
工程命名
![1730645359392154.png ]H9Y)$Z)Q%L`@N1CHJRRUSB.png](http://uphotos.eepw.com.cn/1709346044/pics/1730645359392154.png)
根据开发板原理图,在引脚视图中进行配置
![1730645993175224.png A_79(DE~{_{$GSUM0PD27]3.png](http://uphotos.eepw.com.cn/1709346044/pics/1730645993175224.png)
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全局中断
![1730651700116037.png 5XRN{@]BDQQ]6E_P{A`PO@A.png](http://uphotos.eepw.com.cn/1709346044/pics/1730651700116037.png)
定义图片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 */
}五、实验结果

我要赚赏金
