STM32 RGBLCD

2023-02-09
5分钟阅读时长

开发环境

  1. 开发板: STM32F767IGT6 核心板加正点原子阿波罗底板
  2. 屏幕:正点原子 ALIENTEK 7 RGB LCD 屏幕
  3. 开发软件:STM32CubeIDE

LTDC 外设概述

LTDC 概念

LTDC 全称 LCD-TFT Display Controller,LCD 显示控制器,提供了 RGB 信号和控制信号来直接控制外部 LCD 显示屏。

  1. TFT-LCD 屏幕

    1. 一般 TFT-LCD 屏幕中带有驱动 IC,并集成有显存,其内部就在不断的将显存内容显示到 LCD 面板上;
    2. 驱动屏幕时往往是直接去操作驱动 IC,通过发送操作命令来设置显示模式,通过发送显示数据来修改显存内容。
    3. 数据通信

      1. GPIO 传送 LCD_RS 命令/数据到 IC;
      2. FMC 传送 LCD_CS 片选信号到 IC;
      3. FMC 传送 LCD_WR 写使能信号到 IC;
      4. FMC 传送 LCD_RD 读使能信号到 IC;
      5. IC 传送 D0-D15 16 位数据总线到 FMC;
  2. RGB 屏幕

    1. RGB 类型的屏幕中内部没有驱动 IC,操作这种屏幕时往往使用 MCU 内部集成的 LCD 控制器直接去控制 LCD 显示;
    2. 显存空间当然也是在 MCU 内部,按照空间大小可以选择放在内部 SRAM 或者外部 SDRAM 中。
    3. 数据通信

      1. LTDC 传送 LCD_HSYNC 水平同步信号;
      2. LTDC 传送 LCD_VSYNC 垂直同步信号;
      3. LTDC 传送 LCD_DE 数据使能信号;
      4. LTDC 传送 LCD_CLK 像素时钟;
      5. LTDC 传送 R0-R7 8 位数据总线;
      6. LTDC 传送 G0-G7 8 位数据总线;
      7. LTDC 传送 B0-B7 8 位数据总线;

颜色格式

LCD 可以理解为像素阵,其常见的参数是:

  1. 屏幕尺寸 表示对角线的长度,单位是英寸
  2. 屏幕分辨率 像素点的数量,1024*600 表示一行有 1024 个像素点,共 600 行
  3. 色彩格式

    1. 用于控制每个像素点的颜色
    2. 单色屏每个像素点只需要 1 bit 表示(非黑即白)
    3. 彩色屏每个像素点由 RGB 三原色的值混合

      1. RGB888(3B):R值 8 位、G值 8 位、B值 8 位
      2. RGB565(2B):R值 5 位、G值 6 位、B值 5 位
      3. ARGB8888(4B):在 RGB888 基础上增加 8 位 Alpha 值表示透明度,0x00 表示完全透明,0xFF 表示完全不透明
      4. ARGB1555(2B):在 RGB565 基础上砍掉 1 位用于 Alpha,0 表示完全透明,1表示完全不透明

可以看到,RGB888 比 RGB565 表示的颜色更多,LTDC 对上述格式均支持;但是 RGB888 每个像素点需要 24bit(3 个字节)的显存空间来存储。

在资源紧张的嵌入式系统中,在一般屏幕显示需求中 RGB888 格式过于浪费珍贵的 SRAM 空间;因此在不影响显示的情况下,建议使用 RGB565 格式,每个像素点只需要 16bit(两个字节)的显存空间就够了。

液晶面板的控制信号

  1. RGB 信号线 RGB 信号线各有 8 根,分别用于表示液晶屏一个像素点的红、绿、蓝颜色分量。
  2. 同步时钟信号 CLK 液晶屏与外部使用同步通讯方式,以 CLK 信号作为同步时钟,在同步时钟的驱动下,每个时钟传输一个像素点数据。
  3. 水平同步信号 HSYNC

    1. 水平同步信号 HSYNC(Horizontal Sync) 用于表示液晶屏一行像素数据的传输结束
    2. 每传输完成液晶屏的一行像素数据时,HSYNC 会发生电平跳变 如分辨率为 800x480 的显示屏(800 列,480 行),传输一帧的图像 HSYNC 的电平会跳变 480 次。
  4. 垂直同步信号 VSYNC

    1. 垂直同步信号 VSYNC(Vertical Sync) 用于表示液晶屏一帧像素数据的传输结束
    2. 每传输完成一帧像素数据时,VSYNC 会发生电平跳变。
    3. “帧”是图像的单位,一幅图像称为一帧。在液晶屏中,一帧指一个完整屏液晶像素点
    4. 人们常常用“帧每秒”来表示液晶屏的刷新特性,即液晶屏每秒可以显示多少帧图像。如液晶屏以 60 帧每秒的速率运行时,VSYNC 每秒钟电平会跳变 60 次。
  5. 数据使能信号 DE 数据使能信号 DE(Data Enable) 用于表示数据的有效性,当 DE 信号线为高电平时,RGB 信号线表示的数据有效。

液晶通讯的时间参数和传输时序

建议参考《野火 STM32 HAL 库开发指南》书中 LTDC 部分。

  1. 液晶屏显示的图像可看作一个矩形。液晶屏有一个显示指针,它指向将要显示的像素。
  2. 显示指针的扫描方向方向从左到右、从上到下,一个像素点一个像素点地描绘图形。这些像素点的数据通过 RGB 数据线传输至液晶屏,它们在同步时钟 CLK 的驱动下依次传输到液晶屏中交给显示指针。
  3. 当传输完成一行时,水平同步信号 HSYNC 电平跳变一次,当完成传输一帧时,垂直同步信号 VSYNC 电平跳变一次。
  4. Active width 和 Active height 是可见的 LCD 显示面板分辨率,称为有效宽度和有效高度。
  5. 传送数据行过程:

    1. 传输 HSYNC 信号数据,用 HSW 表示其宽度,单位为 CLK 个数;
    2. 等待 HBP ,即从该水平同步信号开始到有效数据开始间的 CLK 个数;
    3. 传送有效数据;
    4. 等待 HFP ,即从有效数据结束到下一个水平同步信号开始间的 CLK 个数;
  6. 传送数据帧过程:

    1. 传输 VSYNC 信号数据,用 VSW 表示其宽度,单位为行;
    2. 等待 VBP ,它表示在一帧图像开始时,垂直同步信号以后的无效的行数;
    3. 传送有效高度的数据行;
    4. 等待 VFP ,表示在一帧图像结束后,垂直同步信号以前的无效的行数;
  7. 在时间参数控制区域,数据使能信号线 DE 均为低电平;仅在传送有效数据时 DE 为高电平;

图像数据混合

LTDC 有三个层:背景层(BG)、图层 1(Layer1)、图层 2(Layer2)。

  1. 背景层只能是 RGB888 格式,并且是一个常量值,在 LTDC 初始化结构体中由 Backcolor 成员指定;
  2. 图层用来显示内容;

    1. 大小是设置的 Active width 和 Active height,称为有效区域;
    2. 在这个图层的有效区域中,用户可以设置一个任意大小的窗口用于显示,称为 Window;
    3. 当窗口小于图层有效区域时,窗口之外的区域会显示该图层背景色;
  3. 图层混合

    1. 首先,背景和图层的大小都是 Active width 和 Active height;
    2. 背景层在最下面,如果开了单个图层,则显示结果为背景层和单个图层混合结果;如果两个图层都开,则显示结果为背景层先和图层 1 混合,混合结果再与图层 2 混合的结果;
    3. 图层混合在 LTDC 硬件上是一直开启的,可以直接配置该图层用于混合的 Alapha 常量来调节整层透明度,范围为 0-255,0 为完全透明、255 为不透明、127 为半透明;
上一页 STM32 FMC