2. 显示硬件选型:常见显示屏类型与接口协议

做嵌入式显示系统,第一步就是选屏。这步要是选错了,后面全白搭。我见过不少项目,软件写得飞起,结果屏幕刷新跟不上,或者颜色显示不对,最后只能推倒重来。今天咱们就聊聊显示屏选型那些事。

2.1 三种主流显示屏,你该选哪个?

目前嵌入式领域最常见的就三种:TFT-LCD、OLED 和 e-Paper。它们各有各的脾气。

TFT-LCD:最通用的选择

TFT-LCD 说白了就是液晶屏加背光。它成熟、便宜、色彩好。我个人习惯,只要项目对功耗没变态要求,首选就是它。

  • 优点:色彩还原好,亮度高,价格便宜,尺寸选择多
  • 缺点:需要背光,所以功耗下不来;视角不如 OLED
  • 适用场景:智能家居面板、工业控制、车载仪表
我的经验:做工业控制屏时,我建议选宽温范围的 TFT-LCD。普通屏在零下 20 度时,响应速度会明显变慢。这个坑我踩过。

OLED:色彩党首选

OLED 每个像素自己发光,不需要背光。黑色就是纯黑,对比度极高。色彩饱和度也漂亮。

  • 优点:对比度极高,色彩鲜艳,响应速度快,可做柔性屏
  • 缺点:有烧屏风险,寿命不如 LCD,价格贵
  • 适用场景:高端消费电子、可穿戴设备
注意:OLED 的蓝色像素寿命最短。如果你做的是常年显示固定界面的产品,比如仪表盘,OLED 可能不是好选择。我曾经有个项目,OLED 用了两年就出现明显色偏。

e-Paper:省电之王

e-Paper 也叫电子纸。它显示内容后不需要电力维持,只有刷新时才耗电。说白了,它像纸一样。

  • 优点:超低功耗,阳光下可读,护眼
  • 缺点:刷新慢(秒级),不支持彩色或彩色效果差,不支持动态视频
  • 适用场景:电子书、标签、公交站牌

嗯,这里要注意:e-Paper 的刷新速度是硬伤。你想想看,做个菜单切换动画?别想了。

2.2 接口协议:怎么把数据送过去?

选好屏之后,得考虑怎么跟它通信。常见的接口有 SPI、RGB 和 MIPI DSI。选哪个,取决于你的屏有多大、刷新率要多高。

SPI 接口:小屏标配

SPI 是串行接口,线少,简单。适合 3.5 寸以下的小屏。

参数 说明
引脚数 4 线(SCLK、MOSI、MISO、CS)
速度 一般 10-40MHz
适合尺寸 ≤ 3.5 寸
刷新率 30fps 左右(320x240)

SPI 的优点是简单,随便一个 MCU 都能驱动。缺点是速度慢。分辨率一高,刷新率就掉得厉害。

避坑指南:我曾经用 SPI 驱动 480x320 的屏做动画,结果刷新率只有 15fps,卡得不行。后来换成 RGB 接口才解决。所以,做动态界面时,SPI 只适合小分辨率。

RGB 接口:中尺寸的黄金选择

RGB 是并行接口,数据线多,速度快。适合 3.5 到 7 寸的屏。

典型的 RGB 接口有 16 位或 18 位数据线,加上行同步、场同步、时钟等控制线。说白了,它直接把像素数据并行送过去,效率很高。

// RGB 接口初始化示例(伪代码)
void RGB_Init(void) {
    // 设置 GPIO 为 RGB 功能
    GPIO_Config(R0_R7, GPIO_MODE_AF);
    GPIO_Config(G0_G7, GPIO_MODE_AF);
    GPIO_Config(B0_B7, GPIO_MODE_AF);
    
    // 配置时序参数
    LTDC_InitStruct.HSync = 40;    // 行同步脉冲宽度
    LTDC_InitStruct.VSync = 10;    // 场同步脉冲宽度
    LTDC_InitStruct.HBP = 20;      // 行后肩
    LTDC_InitStruct.VBP = 5;       // 场后肩
    
    // 启动 LTDC
    HAL_LTDC_Init(<DC_InitStruct);
}

RGB 接口需要 MCU 有专门的 LCD 控制器(比如 STM32 的 LTDC)。没有的话,就得用外部驱动芯片。

MIPI DSI:高性能之选

MIPI DSI 是差分串行接口,速度极快。适合 7 寸以上、高分辨率、高刷新率的屏。

  • 特点:差分信号,抗干扰强;可多通道并行(1-4 lane)
  • 速度:单 lane 可达 1Gbps 以上
  • 适合:平板、车载大屏、高端 HMI

MIPI DSI 的缺点是复杂。需要 MCU 或 MPU 有专门的 DSI 控制器,调试起来也比较麻烦。我刚开始接触 MIPI 时,光调时序就花了两周。

2.3 分辨率与色彩深度:别盲目追求高参数

很多新手一上来就想要 1080p、24 位真彩色。其实没必要。选分辨率要考虑三个因素:

  1. 人眼距离:手持设备 300 PPI 就够,车载屏 150 PPI 就很好
  2. MCU 性能:分辨率越高,需要的显存越大,刷新压力也越大
  3. 成本:高分辨率屏贵,驱动芯片也贵

色彩深度方面,常见的有:

色彩深度 颜色数 适用场景
16 位(RGB565) 65536 大多数嵌入式场景,性价比高
18 位(RGB666) 262144 对色彩要求稍高的场景
24 位(RGB888) 1677万 高端应用,需要大显存
我的建议:除非你做的是专业图像处理,否则 RGB565 完全够用。人眼其实分不出 65536 色和 1677 万色的区别,尤其是在小屏幕上。而且 RGB565 只占 2 字节,显存省一半。

2.4 选型流程总结

说了这么多,到底怎么选?我一般按这个流程走:

  1. 先定尺寸:根据产品外壳和视距确定屏幕尺寸
  2. 再定分辨率:够用就好,别贪高
  3. 选接口:小屏用 SPI,中屏用 RGB,大屏用 MIPI
  4. 定色彩深度:默认 RGB565,有特殊需求再升级
  5. 考虑功耗:电池供电优先考虑 e-Paper 或 OLED

嗯,这套流程我用了好多年,基本没出过问题。你想想看,选型其实就是在性能、成本、功耗之间找平衡。没有最好的屏,只有最合适的屏。

最后说一句:拿到屏之后,先看数据手册里的时序图。我见过太多人,屏买回来才发现驱动不了。数据手册里的最小时序参数,一定要满足。这个坑,我替你们踩过了。