这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » LTDC+DMA2D驱动RGB LCD屏幕

共1条 1/1 1 跳转至

LTDC+DMA2D驱动RGB LCD屏幕

助工
2024-11-21 18:26:12     打赏

一、

LTDC是一种屏幕驱动控制技术,在ST的一些MCU上会集成有LTDC控制器,能够驱动外部RGB565,RGB888等RGB屏幕,这种RGB屏驱动方式的优点主要是节省掉外部屏幕驱动IC,可以灵活驱动不同分辨率、不同颜色制式的RGB屏。以下将介绍使用LTDC驱动STM32H7S78-DK板载的5寸RGB屏幕,同时使用DMA2D来加快图像数据刷新 

二、

cubeide新建app工程

~)]%XB__YZ8M{HLLVJVXW`5.png

工程命名

]H9Y)$Z)Q%L`@N1CHJRRUSB.png

根据开发板原理图,在引脚视图中进行配置

A_79(DE~{_{$GSUM0PD27]3.png


PG15、PE15为背光和屏幕亮灭控制引脚,需要使能为高电平

[P364TNAS{0[ZK~(FR_W)$0.png


引脚配置完成后进行LTDC参数设置,RGB屏幕型号为RK050HR18-CTG,找到其数据手册

39%ZX6OPH)(7OAW7VL9~8C8.png

(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

编译通过后烧录固件至开发板

e45ce793dd8ca0d8bf347dd9cc48f164.jpg

四、使用DMA2D

HCI095R_20Y(_ELU6WOQJ4N.png


使能DMA2D全局中断

5XRN{@]BDQQ]6E_P{A`PO@A.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 */
}

五、实验结果

screenshots.gif






关键词: LTDC     DMA2D     RGB LCD屏幕    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]