本文基于STM32H750核心,学习使用LTDC外设,用CubeMX创建HAL库工程,驱动显示LCD屏幕。LCD屏采用AT070TN83。
文末有工程链接。
目录
一、CubeMX生成工程
LCD屏的相关配置 
LCD屏的相关配置,可以查手册,具体的原理可以参考一下B站上的讲解:【LTDC—LCD】 ,这里不再做详细讲解。
LCD图层配置
注意,这里的图片长宽不一定要等于屏幕长宽,开始和结束显示位置也可以变化,显存中数据格式这里用的是RGB565,即16位图,考虑到STM32H750的SRAM空间有限。
Display Type是和屏幕的接线方式,有18bits和16bits两种,这个屏幕用的是18Bits
这里还开启几个GPIO脚接到屏幕上,用于一些其他控制。
MPU配置
关于MPU的介绍,参考一下网站上其他文章,这里不做详细阐述,大同小异。
时钟树配置
工程配置
CubeMX配置完成,生成工程
二、Keil配置
找到MX_LTDC_Init()的定义
在MX_LTDC_Init()里初始化完成后,开启背光。也可以在主函数中开启背光。
三、清屏函数
LTDC的使用相当简单,我们已经设置好了显存位置,只需要在显存中放入我们需要显示的内容,LTDC就会自动把数据转换好发送给屏幕,让屏幕显示出来。
#define LCD_MemoryAdd 0x24000000 // 显存的起始地址
void LCD_Clear(uint16_t color)
{
uint32_t i; // 计数变量
while( LTDC->CDSR != 0X00000001); // 判断 显示状态寄存器LTDC_CDSR 的第0位 VDES:垂直数据使能显示状态,可以避免撕裂效应
for(i=0;i<(480*272);i++)
{
*(__IO uint16_t*)( LCD_MemoryAdd + i*2 ) = color ; // 写入显存
}
}
四、画点函数
void LCD_DrawPoint(uint16_t x , uint16_t y , uint16_t color)
{
*(__IO uint16_t*)( LCD_MemoryAdd + (x*2 + y*480*2) ) = color ;
}
由于一个像素点是两个字节的像素,所以要x*2,一行480个像素点,就是480*y*2个字节
用画点函数,画出一个矩形:
int x,y;
LCD_Clear(0xF800);
for(x = 0; x<100; x++)
{
for(y = 0; y<200; y++)
{
LCD_DrawPoint(x , y , 0xFFFF);
}
}
测试完成。
这里附上工程链接:提取码:v7f2 百度网盘下载。