打印
[技术讨论]

ST7789与ST7735区别,ST7789驱动改ST7735驱动代码

[复制链接]
252|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
丙丁先生|  楼主 | 2025-8-6 03:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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%以上的代码迁移。建议优先验证基础显示功能,再逐步移植高级图形特性。

使用特权

评论回复

相关帖子

沙发
丙丁先生|  楼主 | 2025-8-6 03:47 | 只看该作者
ST7789与ST7735区别,ST7789驱动改ST7735驱动代码

使用特权

评论回复
板凳
丙丁先生|  楼主 | 2025-8-6 03:47 | 只看该作者
ST7789与ST7735区别,ST7789驱动改ST7735驱动代码  https://bbs.21ic.com/icview-3476798-1-1.html

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1234

主题

4907

帖子

8

粉丝