stm32cubemx配置SDRAM+LTDC点亮7寸(1024x600)RGB屏 | 您所在的位置:网站首页 › 显示器mcu程序为什么会损坏屏幕 › stm32cubemx配置SDRAM+LTDC点亮7寸(1024x600)RGB屏 |
本篇详细的记录了如何使用STM32CubeMX配置 STM32H743IIT6 的 LTDC 外设驱动 TFT-LCD (7' 1024x600RGB)屏幕。 硬件准备开发板:首先需要准备一个开发板,这里我准备的是STM32H743IIT6的核心板+底板。 TFT-LCD(RGB)屏幕:正点原子7寸(1024x600)RGB屏幕。 2.1. 什么是LTDCLTDC全称 LCD-TFT Display Controller,LCD显示控制器,提供了RGB信号和控制信号来直接控制外部LCD显示屏。 为什么是直接控制呢? 一般 TFT-LCD 屏幕中带有驱动IC,并集成有显存,其内部就在不断的将显存内容显示到LCD面板上,我们驱动这类屏幕时往往是直接去操作驱动IC,通过发送操作命令来设置显示模式,通过发送显示数据来修改显存内容,如图: 还有一些屏幕称为RGB屏幕,内部没有驱动IC,操作这种屏幕时往往使用MCU内部集成的LCD控制器直接去控制LCD显示,显存空间当然也是在MCU内部,按照空间大小可以选择放在内部SRAM或者外部SDRAM中,如图: LCD的原理可以理解为一个像素阵,常见的参数如下: 屏幕尺寸:对角线长度,单位英寸; 屏幕分辨率:像素点的数量,1024*600表示一行有1024个像素点、有60行; 色彩格式:像素点的颜色; 色彩格式是个很重要的参数,用来控制每个像素点的颜色。 单色屏的每个像素点只需要 1bit 来表示(非黑即白),而彩色屏的每个像素点则是由RGB三原色的值混合而成,常用有两种格式: RGB888(3B):R值8位、G值8位、B值8位 RGB565(2B):R值5位、G值6位、B值5位 显然,RGB888 比 RGB565 表示的颜色更多、LTDC也支持RGB888格式,但是RGB888每个像素点需要24bit(3个字节)的显存空间来存储。在资源紧张的嵌入式系统中,在一般屏幕显示需求中过于浪费珍贵的SRAM空间,所以在不影响显示的情况下,建议使用RGB565格式,每个像素点只需要16bit(两个字节)的显存空间就够了。 除此之外,LTDC还支持透明颜色格式: ARGB8888(4B):在RGB888的基础上增加了8位A值(Alpha),0x00表示完全透明、0xFF表示不透明; ARGB1555(2B):在RGB565的基础上砍掉一位,用作A值,0表示完全透明、1表示不透明; 2.3. LTDC外设功能框图LCD_CLK:像素时钟,每个脉冲刷新一个像素点,所有时序以此为基本单位; Active width 和 Active height是可见的LCD显示面板分辨率,所以称为有效宽度和有效高度。 但是在LCD刷新显示的过程中需要水平消隐和垂直消隐: 水平消隐(行切换,从上一行到下一行):HSYNC width + HBP + HFP 垂直消隐(帧切换,整屏刷新完毕):VSYNC width + VBP + VFP 有效显示宽度和消隐宽度合在一起就是总宽度(Total width),有效显示高度和消隐高度合在一起就是总高度(Total height)。 2.5. LTDC的层和窗口LTDC有三个层:背景层(BG)、图层1(Layer1)、图层2(Layer2),如图: ① 背景层只能是RGB888格式,并且是一个常量值,在LTDC初始化结构体中由 Backcolor 成员指定; ② 图层用来显示内容; 大小是之前我们设置的 Active width 和 Active height,称为有效区域,图中黄色部分; 在这个图层的有效区域中可以设置一个任意大小的窗口用于显示,称为Window,图中绿色部分; 当窗口小于图层有效区域时,窗口之外的区域会显示该图层背景色; ③ 图层混合 首先要清楚一点,背景和图层的大小都是 Active width 和 Active height。 背景层在最下面,如果开了单个图层,则显示结果为背景层和单个图层混合结果;如果两个图层都开,则显示结果为背景层先和图层1混合,混合结果再与图层2混合的结果。 图层混合在LTDC硬件上是一直开启的,可以直接配置该图层用于混合的Alapha常量来调节整层透明度,范围为0-255,0为完全透明、255为不透明、127为半透明。 3. 使用STM32CubeMX生成工程1、打开STM32CubeMX,打开MCU选择器,选择芯片STM32H743IIT6; 3.1配置时钟源如果选择使用外部高速时钟(HSE),则需要在System Core中配置RCC; 如果使用默认内部时钟(HSI),这一步可以略过; 这里我都使用外部时钟: 本实验中需要在SDRAM中分配显存空间。 配置LTDC本文使用的 RGB LCD 提供的接口示意图如下: 除了用来控制LCD背光的LCD_BL引脚连接到普通GPIOB_5上,其余所有引脚都连接到LTDC外设对应的引脚上。 原子的板子设计和cubemx默认配置并不符合,需要手动检查修改GPIO。 例程测试出是 1024*600 分辨率的7寸RGB屏幕。 颜色格式配置实验使用RGB565颜色格式: 查阅屏幕的数据手册: 屏幕时序极性配保持默认,背景颜色配置保持默认即可: ![]() 本文中为了演示层混合效果,使用两层配置。 ① 图层上的窗口设置如下,有交叉部分,方便观察效果: ② 设置背景色和混合参数: ③ 设置显存空间: 本文中将帧缓存buffer创建在SDRAM中,SDRAM的起始地址为 0xC0000000,由于使用 RGB565 格式,每个像素点需要两个字节显存,所以整个显存空间为:10246002 = 1228800 B。 不设置显存空间,则该层窗口显示颜色会是黑框,与层1的窗口进行区分。 LTDC GPIO速度配置LTDC的通信引脚一定要配置为高速度,否则无法驱动屏幕: LCD背光控制引脚接在PB5,配置为输出模式: STM32H743IIT6的最高主频到400M,使HCLK = 200Mhz即可: LCD_DCK时钟在数据手册中给出的范围是:
点击GENERATE CODE即可生成MDK-V5工程: 4. 背景层显示测试 背景层的显示无需SDRAM,可以用来检查LTDC是否配置成功。 ① 修改 main 函数,在LTDC初始化之前,GPIO初始化之后,打开背光: ② 修改ltdc.c中的 MX_LTDC_Init 函数,设置背景色为蓝色,并卡在初始化后等待: 如果配置无误,则屏幕会显示蓝色: |
CopyRight 2018-2019 实验室设备网 版权所有 |