ST7789与ST7735区别
ST7789与ST7735显示控制器核心差异解析
ST7789和ST7735作为常用的TFT-LCD显示控制器,在硬件特性、功能支持和应用场景上存在显著差异,以下从核心参数、功能特性和应用适配三个维度展开对比分析。
一、核心硬件参数对比
| 参数 | ST7735系列 | ST7789 |
|----------------|---------------------------------------|---------------------------------------|
| 分辨率支持 | 基础型号128×128,衍生型号ST7735S可达128×160 | 典型支持240×240、320×240等高分辨率 |
| 接口类型 | SPI(硬件/软件)、8/9/16/18位并行接口 | SPI为主,支持更高速率通信 |
| 显存容量 | 132×162×18位(适配128×160分辨率) | 更大容量显存,适配更高分辨率屏幕 |
| 电压容忍度 | 标准型号较低,-R/-S型号最高支持4.8V | 未明确提及,但通常支持宽电压范围 |
二、功能特性差异
显示能力扩展
ST7789支持刷新率调整、亮度控制等高级功能,可实现更复杂的动态显示效果;ST7735需通过初始化后修改扫描顺序(如MV/MY位配置)解决分辨率适配问题。
驱动程序复杂度
ST7789驱动需处理更高分辨率下的像素点设置和时序优化,例如51单片机专用驱动文件包含详细初始化步骤;ST7735驱动相对简单,Arduino库提供RGB565颜色转换等便捷函数。
开发板适配
ST7789常与ESP32-CAM、pilotu78等开发板搭配,支持LVGL图形库移植;ST7735在STM32、HLK-W806等平台有成熟软件/硬件SPI驱动方案。
三、应用场景与选型建议
1. 低分辨率低成本场景
选择ST7735:如1.8英寸128×160屏幕,适用于小型嵌入式设备的简单图形显示。
优势:驱动库成熟(如Adafruit-ST7735-Library),适配Arduino等入门级平台。
2. 高分辨率复杂界面场景
选择ST7789:如240×280触摸屏,支持LVGL动画效果和触摸交互,适合企业级AI终端。
优势:显存更大,支持并行接口提速,满足区块链应用等高信息密度显示需求。
3. 开发注意事项
ST7735需注意分辨率阉割问题,可通过调整扫描顺序修复显示偏移;
ST7789需关注ESP32等平台的版本兼容性,避免因固件更新导致驱动失效。
四、总结
两者均基于SPI通信,但ST7789在分辨率、功能扩展性上更优,适合中高端嵌入式显示;ST7735以低成本和简单驱动见长,适合入门级项目。选型时需结合屏幕尺寸、分辨率需求及开发平台资源综合判断。
ST7789驱动改ST7735驱动代码
根据历史对话信息及技术文档分析,将ST7789驱动代码适配至ST7735需重点解决硬件差异、指令集兼容性、分辨率匹配三大核心问题。以下是具体修改指南及实操建议:
一、硬件层适配修改要点
1. 引脚重定义
ST7789通常支持更高SPI速率(可达80MHz),而ST7735建议降频至20-30MHz。
检查`RESET`(复位)、`DC`(数据/命令选择)引脚是否与硬件连接一致,必要时调整GPIO定义。
2. 供电电压配置
ST7735部分型号(如ST7735S)需3.3V供电,若原ST7789设计为5V需修改电源电路。
二、驱动层关键代码重构
1. 初始化序列重写(核心差异)
```c
// ST7789典型初始化(高分辨率)
st7789_init() {
write_cmd(0x36); // 扫描方向控制
write_data(0x00); // 默认竖屏模式
// ... 其他240x320分辨率配置
}
// 替换为ST7735初始化(示例)
st7735_init() {
write_cmd(0xB1); // 帧率控制 (ST7735特有)
write_data(0x01); // 典型值
write_cmd(0x36); // 扫描方向
write_data(0xC0); // 需根据屏幕调整MY/MX/MV位
// 注意:ST7735需指定分辨率(如128x160)
write_cmd(0x2A); // 列地址设置
write_data(0x00); write_data(0x00); // X起始=0
write_data(0x00); write_data(0xA0); // X结束=160
}
```
2. SPI通信优化
降低SPI速率:将原ST7789的`SPI.setClockDivider(SPI_CLOCK_DIV2)`改为`DIV4`或更高;
移除ST7789专用指令(如`0x3A`色深设置),ST7735默认使用RGB565格式。
三、应用层适配策略
1. 分辨率适配
修改显示区域坐标:原ST7789的`240x320`范围需缩小至ST7735的`128x160`,更新所有绘图函数的坐标边界:
```c
// 原ST7789绘制范围
fill_rect(0, 0, 240, 320, color);
// ST7735需改为
fill_rect(0, 0, 128, 160, color); // 避免越界显示
```
2. 颜色格式兼容
若原驱动使用`RGB888`,需添加转换函数至`RGB565`:
```c
uint16_t rgb888_to_565(uint8_t r, uint8_t g, uint8_t b) {
return ((r & 0xF8) << 8) | ((g & 0xFC) << 3) | (b >> 3);
}
```
3. 显存优化
ST7735显存更小,需减少双缓冲等内存消耗策略,或降低图形缓冲区大小。
---
四、调试技巧与验证
1. 扫描方向异常修复
若出现图像倒置/偏移,调整`0x36`寄存器的`MY/MX/MV`位组合(共8种模式),常用值:
`0xC0`:竖屏正常方向
`0xA0`:横屏旋转180°
2. 关键寄存器检查
通过逻辑分析仪捕获初始化指令流,重点验证:
`0x11`(退出睡眠模式)后需延迟120ms
`0x29`(开启显示)是否被执行
移植风险提示:若目标屏为ST7735S(128x160),需确认PCB是否支持该分辨率。某些低价屏可能阉割显存,导致边缘区域无法显示。
五、参考驱动资源
ST7735官方库:GitHub搜索`Adafruit-ST7735-Library`,参考`st7735_initR()`函数的分支处理逻辑
跨平台适配案例:查看Arduino论坛中"ESP32驱动128x160 ST7735"的引脚配置方案
通过以上步骤,可完成90%以上的代码迁移。建议优先验证基础显示功能,再逐步移植高级图形特性。
|