TFT驱动ST7789使用总结

news2024/11/24 7:39:21

最近在使用一款TFT驱动芯片ST7789,在阅读芯片数据手册和液晶屏数据手册时,发现总是对不上,芯片手册中,有好几个引脚,一会儿是这个作用,一会儿又变成另一种作用,实在是让人感到混淆。网上找了好久,也没有人专门针对这款芯片进行细致地讲解,按理说,这款芯片很常用,为啥没有一个专门的教程呢,难道这个确实太简单了,只是我不会看数据手册吗?为此,从网上找了些零碎的内容,做一个简单的汇总整理,并根据我自己的理解和使用情况做一些必要的补充。

ST7789v是Sitronix公司研制的,用于驱动LCD的芯片,在市场上有很多TFT屏使用这款芯片驱动。注意:虽然驱动芯片相同,但不同TFT厂家在设计接口时各有不同

按照《ST7789v Datasheet》的描述,ST7789v的接口有以下几种:

- Parallel 8080-series MCU Interface (8-bit, 9-bit, 16-bit & 18-bit)

- 6/16/18 RGB Interface(VSYNC, HSYNC, DOTCLK, ENABLE, DB[17:0])

- Serial Peripheral Interface(SPI Interface)
- VSYNC Interface

其中Parallel 8080-series MCU Interface、Serial Peripheral Interface两种使用最多,市场上的TFT屏提供的基本是这两中接口或其中之一。

有几点需要注意:

(1)TFT厂家提供的接口描述与《ST7789v Datasheet》里的可能不一致,特别是引脚名称,需要核对清楚;

(2)TFT屏幕内的IM3是连接的高电平还是低电平,这直接约束可以使用哪些接口,IM3,它常常被TFT厂家在内部连好了;

(3)并口引脚的线序必须与厂家核对清楚。

本次,我使用的是SPI接口(4-line 8bit serial I/F Ⅱ下的SDO没有使用)。

端口定义示例如下:

/*MCU连接ST7789V端口定义*/
#define LCD_CS_PORT      	GpioPortA
#define LCD_CS_PIN       	GpioPin4 //CS
#define LCD_DCX_PORT     	GpioPortA
#define LCD_DCX_PIN      	GpioPin5 //不同显示屏厂家标识不同,如:RS/SPISCL/SCK		
#define LCD_SDA_PORT    	GpioPortA
#define LCD_SDA_PIN     	GpioPin7 //SDA/MOSI
 
#define LCD_WRX_PORT    	GpioPortA
#define LCD_WRX_PIN     	GpioPin3 //不同显示屏厂家标识不同,如:WR
 
/*ST7789 Reset控制端口定义*/
#define LCD_RESX_PORT		GpioPortA
#define LCD_RESX_PIN		GpioPin10 //不同显示屏厂家标识不同,如:RESET/RES

参考:HC32L196 驱动 ST7789v 经验_junzheng的博客-CSDN博客

ST7789V数据手册重点内容摘录

This chip is capable of connecting directly to an external microprocessor, and accepts, 8-bits/9-bits/16-bits/18-bits parallel interface.

基本特征

Display Resolution: 240*RGB (H) *320(V)

Frame Memory Size: 240 x 320 x 18-bit = 1,382,400 bits

MCU Interface

- Parallel 8080-series MCU Interface (8-bit, 9-bit, 16-bit & 18-bit)

- 6/16/18 RGB Interface(VSYNC, HSYNC, DOTCLK, ENABLE, DB[17:0])

- Serial Peripheral Interface(SPI Interface)

- VSYNC Interface

Wide Supply Voltage Range

- I/O Voltage (VDDI to DGND): 1.65V ~ 3.3V (VDDI≦VDD)

- Analog Voltage (VDD to AGND): 2.4V ~ 3.3V

框图

以上注意,DCX/RS和WRX/SCL这两个引脚的功能是可配置的。 

因此,具体厂家生产的液晶屏,需要核对好接口功能。

关键引脚

IM3 IM2 IM1 IM0这几位是决定使用哪种接口的。以及对应的一些位的作用。

复位

并行接口中用作数据/命令的选择位,SPI中用作时钟

 

片选,低电平使能

并口中是写使能,4线SPI中用作数据/命令选择接口

用在并口中,读使能

SPI接口的输入输出或者仅作为输入,数据在时钟的上升沿被锁存,要么是半双工,要么相当于MOSI引脚

SPI输出,在时钟下降沿输出数据,相当于MISO

DB[17:0] 并行口时用到的数据位。 

注意,上面DCX/RS和WRX/SCL这两个引脚的RS和SCL功能,并未提及,不知道具体是什么含义。

针对具体的液晶屏ASL024HLCGB00-210

只实现了两种接口,IM3和IM0固定为0 

当IM2和IM1均为1时,使用的就是4线8位SPI

片选

时钟

IM3固化为低电平,因此是数据输入/输出口

这里只能实现半双工,其实,可以将SDA作为输入(上升沿),然后还有个单独的SDO作为输出(下降沿),以此实现全双工。

命令/参数选择

又回到ST7789V数据手册

直接关注四线八位SPI,4-line serial interface

引脚定义

片选

The write mode of the interface means the micro controller writes commands and data to the LCD driver.

In 4-lines serial interface, data packet contains just transmission byte and control bit WRX is transferred by the WRX pin. If WRX is “low”, the transmission byte is interpreted as a command byte. If WRX is “high”, the transmission byte is stored in the display data RAM (memory write command), or command register as parameter.

Any instruction can be sent in any order to the driver. The MSB is transmitted first. The serial interface is initialized when CSX is high. In this state, SCL clock pulse or SDA data have no effect. A falling edge on CSX enables the serial interface and indicates the start of data transmission.

写时序

读时序

The read mode of the interface means that the micro controller reads register value from the driver. To achieve read function, the micro controller first has to send a command (read ID or register command) and then the following byte is transmitted in the opposite direction. After that CSX is required to go to high before a new command is send (see the below figure). The driver samples the SDA (input data) at rising edge of SCL, but shifts SDA (output data) at the falling edge of SCL. Thus the micro controller is supported to read at the

rising edge of SCL. After the read status command has been sent, the SDA line must be set to tri-state no later than at the falling edge of SCL of the last bit.

更多内容,详见数据手册。其他具体内容在实践中再总结补充吧。 

相关命令参考数据手册9 COMMAND 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/530468.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第三十六天学习记录:C语言进阶:指针详解Ⅳ

指向函数指针数组的指针 指向函数指针数组的指针是一个指针,指针指向一个数组,数组的元素都是函数指针。 int(*pfArr[4])(int, int);//pfArr是一个数组-函数指针的数组int(*(*ppfArr)[4])(int, int) &pfArr;//ppfArr是一个数组指针,指针…

网络进阶学习:重要网络协议(tcp协议,udp协议,http协议)

重要网络协议(tcp协议,udp协议,http协议) 网络协议是什么?TCP协议UDP协议HTTP协议TCP与UDP的职能区别⭐TCP职能⭐就TCP原理层面说应该分为三部分建立连接数据传输断开连接 ⭐UDP职能⭐就UDP原理层面说应该分为三部分发送数据数据…

单链表(增、删、查、改)的详细介绍 必看!!!

文章目录 链表介绍单链表初始化单链表打印增加节点单链表的头插单链表的尾插在给定位置之后插入在给定位置之前插入 删除节点单链表的头删单链表的尾删删除给定位置之后的节点删除给定位置处的节点 查找节点修改节点单链表销毁 链表介绍 链表是一种物理存储单元上非连续、非顺序…

【Mybatis】如何实现ORM映射-二

唠嗑部分 上篇文章我们说了Mybatis基本的CRUD操作及工具类的封装,相关文章: 【Mybatis】简单入门及工具类封装-一 大家都知道,Mybatis是半自动化的ORM框架,那么它到底是如何帮我们完成ORM映射的呢? 这就是本篇文章和…

SpringBoot整合Dubbo+Zookeeper

第一步、使用IDE创建一个SpringBoot项目 第二步、启动一个Zookeeper服务(如果是第一次安装且没有配置zoo.cfg,此时会报出zookeeper服务器会提示缺少zoo.cfg文件) 在zookeeper安装目录下的conf文件夹内有一个名为zoo_sample.cfg的配置文件&a…

[深度学习思想] ControlNet 工作原理

Stable Diffusion (2021 https://arxiv.org/abs/2112.10752) 带领了vision领域,具体是AI绘画领域达到了一个新高度。但是可控性成为使用的一个大瓶颈。Controlnet (2023 https://arxiv.org/abs/2302.05543) 提出一个深度学习模型框架,很好解决这个问题&a…

Liunx基础命令 - touch命令

touch命令 – 创建空文件与修改时间戳 touch命令的功能是用于创建空文件与修改时间戳。如果文件不存在,则会创建出一个空内容的文本文件;如果文件已经存在,则会对文件的Atime(访问时间)和Ctime(修改时间&a…

带头双向循环链表(增、删 、查、改)基本操作详细介绍 必看!!!

文章目录 链表介绍链表初始化链表打印查找元素增加节点头插尾插在指定位置插入 删除节点头删尾删删除指定位置节点 链表判空获取链表中元素的个数链表销毁 链表介绍 前面说到,链表的结构一共有八种:带头单向循环链表、带头单向非循环链表、带头双向循环…

渗透测试--3.2捕获和监听网络数据

目录 1.监听捕获数据方法 2.kali监听捕获工具介绍 arpspoof driftnet 1.监听捕获数据方法 渗透测试中,捕获和监听网络数据是非常重要的一项任务,可以帮助我们发现潜在的漏洞和攻击面。以下是一些常见的捕获和监听网络数据的方法: 抓包工…

Liunx基础命令 - cp复制命令

cp命令 – 复制文件或目录 cp命令来自英文单词“copy”的缩写,中文译为“复制”,其功能是用于复制文件或目录。cp命令能够将一个或多个文件或目录复制到指定位置,亦常用于文件的备份工作。-r参数用于递归操作,复制目录时若忘记添…

网络编程——UDP编程

UDP编程 UDP编程步骤通信流程serverclient 函数接口socketbindrecvfromsendto 举例UDP客户端UDP服务器 UDP编程步骤 在C语言中进行UDP编程的一般步骤如下: (1)包含头文件: 在代码中包含必要的头文件,以便使用UDP编程所…

借助国内ChatGPT平替+剪映/百度AIGC平台快速制作短视频

系列文章目录 借助国内ChatGPT平替MindShow,飞速制作PPT 借助国内ChatGPT平替markmap/Xmind飞速生成思维导图 文章目录 系列文章目录前言一、科大讯飞“星火”认知大模型二、使用步骤1.借助讯飞星火生成短视频的文案2.选择剪映生成短视频3.选择百度AIGC平台生成短…

redis复制机制

文章目录 1. Redis 复制机制2. 基本命令3. 修改配置文件4. 代码案例4.1 一主二仆4.2 薪火相传4.3 反客为主 5. Redis复制工作流程6. Redis 复制的缺点 1. Redis 复制机制 概念 : Redis 复制机制 能干的活 : 读写分离 : 写 就找 主机 master , 读就找从机…

Centos7离线安装Docker

在我们部署Docker镜像时,难免会遇到服务器没有网络情况,这时候我们就需要离线安装Docker 参考文档:https://docs.docker.com/engine/install/binaries 下载Docker安装包 下载地址:https://download.docker.com/linux/static/st…

玩转Google开源C++单元测试框架Google Test系列(gtest)之六 - 运行参数

一、前言 使用gtest编写的测试案例通常本身就是一个可执行文件,因此运行起来非常方便。同时,gtest也为我们提供了一系列的运行参数(环境变量、命令行参数或代码里指定),使得我们可以对案例的执行进行一些有效的控制。…

OpenCL编程指南-4.3类型转换

隐式类型转换 隐式类型转换是一种自动的类型转换,只要混合使用不同的类型,编译器就会完成这种隐式类型转换。这里支持表4-1中定义的标量类型(除void、double和half以外)的隐式转换。完成隐式转换时,并不只是重新解释一…

c/c++中的数据内存分布

c/c中的数据内存分布 1. C/C内存分布2. C语言中动态内存管理方式3. C中动态内存管理4. operator new与operator delete函数5. new和delete的实现原理6. malloc/free和new/delete的区别7.内存泄漏**什么是内存泄漏,内存泄漏的危害****内存泄漏分类(了解&a…

练习时长两年半的扫雷

目录 设计思路 游戏运行效果 函数的声明 头文件game.h 游戏主体(源文件) 1.game.c 2.test.c 各文件的阐述 各部分设计心得 1.打印菜单 2.初始化雷池 3.打印雷池以及玩家界面 打印效果 如何改变雷的数量与雷池大小 4.生成随机雷 5.排雷与对局判断 对于越界的看法 设计…

Pruning 系列 (五)Dropout、Dropconnect剪枝

环境 python 3.9numpy 1.24.1pytorch 2.0.0+cu117一、Dropout dropout在全连接层使用。 假设丢弃概率是P,有两种实现方式,不管是在《测试阶段》还是《训练阶段》对每层的输出做缩放,都是为了保持伯努利分布的期望np。《测试阶段》没dropout 而是全量神经元参与运算,不然预…

JAVA8的新特性——lambda表达式

JAVA8的新特性——lambda表达式 此处,我们首先对于Java8的一些特性作为一个简单介绍 Java 8是Java编程语言的一个重要版本,于2014年发布。Java 8引入了许多新特性和改进,以提高开发效率和性能。以下是Java 8的一些主要新特性: Lam…