关于 ST7735 显示器使用硬件SPI进行通信,需要注意以下几个关键点和步骤:
? 核心概念: 硬件 SPI 利用微控制器芯片内部的专用串行外设接口(SPI 外设),进行高速、高效的通信。与软件模拟的“bit-banging” SPI 相比,硬件 SPI 由硬件处理时钟生成和数据移入/移出,速度更快,占用 CPU 资源更少。
? 硬件连接要求:
- SPI 引脚:
- SCLK: SPI 时钟线。连接主控的 SPI SCK 引脚到屏幕的 SCL/SCLK 引脚。
- MOSI: 主设备输出、从设备输入线。连接主控的 SPI MOSI 引脚到屏幕的 SDA/SDI/DIN/MOSI 引脚。
- 注意: ST7735 是 SPI 从设备,没有 MISO 引脚(MISO / SDO 通常不需要连接,除非需要读寄存器)。
- SPI 从设备选择:
- CS: 片选引脚(通常是低电平有效)。连接主控的一个 GPIO 引脚到屏幕的 CS/SDA_CS/SCS 引脚。
- DC(或 RS): 数据/命令选择引脚(高电平表示数据;低电平表示命令)。连接主控的另一个 GPIO 引脚到屏幕的 DC/RS/A0 引脚。
- RST: 复位引脚(通常是低电平有效)。连接主控的另一个 GPIO 引脚到屏幕的 RST/RES 引脚。如果不需要软件复位,也可接一个上拉电阻到 VCC。
- 电源: VCC(电源正极,通常是 3.3V), GND(电源负极)。
- 背光: LED+ / BLK / K 引脚通常需要一个限流电阻接到 VCC 来控制亮度。可以将其连接到主控的 PWM 引脚进行调光,或用固定电平控制开关。
- 重要: 确保主控与屏幕的电压电平兼容(通常都是 3.3V)。如果主控是 5V,需要电平转换(电阻分压或专用电平转换器)或确保屏幕的 5V 容忍性(具体看屏幕模块规格)。
⚙️ SPI 配置(在代码中): 你需要使用主控平台的 SPI 库函数配置 SPI 外设模块:
- 选择 SPI 外设/实例: (如
SPI,SPI1,HSPI等) - 设置 SPI 模式: ST7735 一般工作在 Mode 0 (时钟极性 CPOL = 0, 时钟相位 CPHA = 0) 或 Mode 3 (CPOL = 1, CPHA = 1)。务必查阅你的屏幕模块资料或控制器手册确认。Mode 0 是最常见的选择。
- 设置位顺序: 通常设置为 MSB(最高位)优先。
- 设置主/从模式: 主控作为 SPI 主设备(MASTER)。
- 设置时钟速率:
- 初始化阶段:一般使用较慢的速度(例如 1 MHz 或更低),以确保稳定性并发送复杂的初始化序列。
- 初始化完成后:可以根据需要提高时钟速度(例如 10MHz, 20MHz 甚至更高),但需注意稳定性(布线、电源)及屏幕模块本身的速度限制(查阅 datasheet 或模块说明)。
- 初始化 SPI 外设: 调用库函数进行初始化(如
SPI.begin(),spidev_set_mode(),HAL_SPI_Init()等)。
?️ 通信流程(软件控制): 通信的核心操作是发送命令和发送数据。
- 初始化:
- 配置 GPIO 引脚(CS, DC, RST)为输出模式。
- 配置 SPI 主外设(如上所述)。
- 复位序列(可选,但推荐):
- 拉低 RST 引脚(保持低电平至少几毫秒,如 10ms)。
- 拉高 RST 引脚(通常至少再等待 120ms 或更久,让屏幕内部初始化完成)。具体时间要求参考屏幕 datasheet。
- 发送一个命令 (Command):
- 拉低 DC 引脚(表示接下来发送的是命令字节)。
- 拉低 CS 引脚(选中该 SPI 从设备,即屏幕)。
- 使用 SPI 发送函数(如
SPI.transfer(cmd))发送命令字节(cmd)。 - 拉高 CS 引脚(结束通信)。
- 发送一个数据字节 (Data) 或数据流 (Data Stream):
- 拉高 DC 引脚(表示接下来发送的是数据字节)。
- 拉低 CS 引脚。
- 使用 SPI 发送函数发送 1个 或多个(
len)数据字节(如SPI.transfer(data),SPI.transfer(data_buf, len))。 - 拉高 CS 引脚。
- 发送带参数的命令:
- 调用“发送命令”流程发送命令字节(带 DC 低)。
- 调用“发送数据”流程发送参数字节(带 DC 高)。参数可以有 0 个、1个或多个。
- 初始化序列: 在复位完成后,需要发送一系列的配置命令及其参数对屏幕进行初始化(设置方向、颜色模式、伽马、打开显示等)。这个序列通常由驱动库提供或参考屏幕资料/示例代码。关键命令如
SLPOUT(退出睡眠模式),DISPON(打开显示)。 - 绘制像素/图像: 通常涉及设置 GRAM 写入区域(如
CASET,RASET),然后发RAMWR命令,接着连续发送像素颜色数据流(16位 如 RGB565 格式)。硬件 SPI 在这里能极大地提升填充速度。
? 驱动库(简化开发):
- 强烈建议使用成熟的驱动库,如:
- Arduino:
Adafruit_ST7735和Adafruit_GFX - ESP32/ESP8266 IDF/Arduino:
TFT_eSPI - STM32 HAL: 库如
ST7735_TFT或参考 CubeMX 生成的 SPI 代码集成 - Raspberry Pi Pico:
st7735.py(MicroPython/CircuitPython) - 这些库底层都实现了硬件 SPI 通信,并封装了初始化、绘图函数等,你只需要正确配置引脚映射即可。
- Arduino:
- 库选择与配置: 选择库后,需要在其配置文件中指定你所连接的硬件 SPI 通道(如
SPI,SPI1,VSPI,HSPI)以及CS,DC,RST等控制引脚号。
? 常见问题排查:
- 空白屏/花屏:
- 检查电源和所有连线(特别是 SCLK,MOSI,CS,DC,RST)。
- 确认复位时序执行且复位后有足够延迟。
- 检查初始化序列是否正确发送,特别是
SLPOUT和DISPON。 - 仔细核对 SPI 模式 (Mode 0/3) 是否正确设置!
- 排查电压电平是否兼容(主控3.3V输出 vs 屏幕3.3V要求)。尝试降低 SPI 时钟速度。
- 检查背光是否点亮(LED+ 是否接高电平/PWM)。
- 速度慢:
- 确保使用的是硬件 SPI 而非软件模拟 SPI(配置库时选择硬件 SPI 接口)。
- 确认初始化完成后的 SPI 时钟速度是否已设置到较高值(在库中查找设置)。
- 检查屏幕控制器是否支持更高速度。
- 驱动安装问题: 确保库已正确安装,硬件 SPI 已启用,引脚定义正确匹配你的实际连接。
? 总结关键行动点:
- 正确连线:接好 SCLK, MOSI, CS, DC, RST, VCC, GND, 背光。
- 配置 SPI 外设:作为主设备,选择正确接口,设置 Mode (通常是0), MSB优先,初始低速。
- 正确控制 GPIO:软件控制 CS、DC、RST 电平。
- 执行复位和初始化序列:严格按照时序要求。
- 使用驱动库:大幅简化流程(如
Adafruit_ST7735,TFT_eSPI)。 - 重点关注模式匹配:Mode 0/3 是常见故障点。
- 善用示例代码:从已知能工作的硬件和软件配置开始调试。
通过遵循以上步骤和注意点,你应该能够顺利驱动 ST7735 屏幕使用硬件 SPI。??
? 提示:若你使用的是树莓派或Arduino开发板,可直接使用对应平台的驱动库(如
luma.lcd或Adafruit_ST7735)来简化开发过程,它们内部已优化了SPI时序并处理了底层通信细节。
ST7735的相关资料分享
目录前言一、3线SPI二、使用1.命令2.对应引脚调整总结前言驱动芯片是ST7735,之前在Arduino上找库,没几个能用的(我FW不能用肯定是我的错),最后还是自己从STM32移植一个。顺便介绍
茶壶茶茶
2022-01-25 06:18:42
TFT1.44寸屏ST7735驱动GitHub的相关资料推荐
STM32应用之TFT1.44寸屏ST7735驱动GitHub项目下载链接:点我下载硬件平台:stm32f103rct和1.44寸128x128 TFT屏(st7735驱动)IDE:keil MDK
母猪会上树
2022-02-18 06:56:58
【Milk-V Duo 开发板免费体验】3. 点亮st7735屏幕
前言 本文介绍milkv-duo加载st7735的lcd屏幕,以及屏幕显示log。 参考文章:记录为Linux配置spi屏幕(st7735s)https://community.milkv.io/t
voidpbq
2023-09-18 22:05:24
LilyGo-T-Wristband板无法通过SPI从ST7735读取ID寄存器咋办?
我在使用 LilyGo-T-Wristband 板将 Arduino 代码移植到本机 idf-esp 代码时遇到问题。无法通过 SPI 从 ST7735 读取 ID 寄存器。这是我的 SPI
ht_liu
2023-03-01 06:59:31
【国民技术N32项目移植】N32G457项目移植之RT-Thread SPI_TFT_LCD ST7735
/h主要的功能是实现st7735画点、画线、画字等功能函数lcd_init.c/h 主要实现的硬件接入函数,我们今天的主要改造就对这个函数进行改造移植。lcdfont.h、pic.h主要是字库
华仔stm32
2023-01-30 23:40:17
怎样把ILI9326移植到Fireduino上替代原先的ST7735库呢
中断的引脚,进入中断后可以通过SPI方式读取电阻屏的AD值来计算点击的坐标,估计使用的芯片是XPT2046之类的。但是官方默认是ST7735 IC的显示屏,而且到现在为止,这个配套的显示屏还没有上市,买不到,无奈只好使用原来的给Arduino准备的TFT了。
lucas_songlea
2022-04-11 15:07:19
【沁恒微CH32V307评估板试用体验】SPI驱动ST7735时序
驱动LCD是单片常用外设之一,我这里书写SPI驱动后,驱动ST7735不成功,将驱动与时序附下,希望得到沁恒官网的支持:ST7735初始化
华仔stm32
2022-05-26 20:19:37
[经验] 上海航芯ACM32F403RET7外设SPI测试。点亮SPI LCD屏.驱动芯片ST7735.
_GPIO_Init();/*软件模拟SPI驱动TFTLCD 初始化程序*//*硬件模拟SPI驱动TFTLCD 初始化程序*/ST7735_GPIO_Init();ST7735_Spi2_Init();/*硬件模拟SPI驱动
HQGBOY
2022-10-23 10:55:04
【LuckFox Pico 开发板免费试用】3. 通过fbtft点亮st7735屏幕
前言 本章使用fbtft添加spi lcd st7735/gc9306。 fbtft生成fb0设备,后续通过lvgl可以实现自定义界面绘制。 一、电路图 使用开发板的spi0的scl以及mosi
voidpbq
2023-11-14 21:08:15
Nuvoton M487开发板的USCI外设评测
,st7735_spi 是SPI设备的操作,st7735_lcd.c 是 LCD屏幕的操作。首先将st7735挂载到 uspi bus上st7735_spi.c/* * Copyright (c
wo4456
2022-04-21 16:09:15
RA MCU众测宝典 | SPI驱动TFT屏幕
IC是ST7735。实验的主要目的是根据屏幕的引脚定义来调用FSP库的SPI功能,为之后的项目模块整合打个基础。01硬件部分1.8寸TFT屏幕的引脚定义如下:观察
2026-02-03 17:02:57
STM32F407VET6+ST7735TFT LCD彩屏驱动程序分享
硬件准备STM32F407VET6开发板一块编译器使用的是STM32cubeide。屏幕使用的是如图所示的屏幕,驱动芯片是st7735.驱动协议采用的是spi通讯协议。和stm32芯片的连接方式如下
沈文强66
2022-02-18 07:34:17
Amica ESP8266上是否有任何其他引脚可以使用显示器 - 然后使用D0再次检测闪光灯按钮?
我有一个带显示器的 Amica ESP8266。我有一个单色 OLED,现在我用 ST7735 TFT 取而代之。我过去常常检查闪光灯按钮的按下情况(改变屏幕等),中断到引脚 0。 现在我
dgfdf
2023-05-25 06:30:23
基本定时器TIM6和TIM7介绍
STM32F1案例 ST7735 TFT液晶显示屏综合库使用硬件平台野火STM32F103ZET6 霸道V2开发板正点原子F1系列开发板STM32F103ZET6核心板ST7735 TFT液晶显示
技术牛人小渣子
2021-08-18 06:09:53
CH32V307VCT6使用RT-Thread驱动ST7735,LCD初始化触发HardFault?
最近手上入手了一批ST7735,0.96寸的,打算使用CH32V307进行驱动,使用RTT,将LCD初始化函数翻到了主函数,程序下载后发现启动就触发HardFault?终端输出:调整了main函数的栈大小也不行,最大调到16384,8192都不行?同时将board.c中heap的值调大均不行?
jf_15811252
2023-04-08 20:10:48
【兆易创新GD32VF103R-START开发板试用体验】SPI驱动LCD-ST7735
【目的】ST7735是一款常用的LCD屏,使用SPI驱动,是对spi外设的使用入门。1、spi通道选择,由于spi0有些IO没有引出,再加上PA2、PA3要作为串口1来使用,所以只能用spi1来外设
华仔stm32
2022-05-18 13:34:51
如何在esp8266 Node MCU的硬件上部署LVGL
前言本文,介绍如何在esp8266 Node MCU的硬件上部署LVGL项目。使用的屏幕使用型号是ST7735 TFT 128x128屏幕。(一)arduinoIDE esp8266环境配置自行
笑尽往事
2021-12-08 07:15:50
基于微控制器的433MHz发射器和接收器模块间的通信方案
接收器电路由433 MHz射频接收器模块、ST7735 1.8寸彩色TFT显示屏和Arduino Uno开发板组成。
2020-10-28 14:04:17
RT-Thread与Renesas RA2L1实现1.8寸TFT屏幕显示的步骤
函数,如下所示: 接下来在NewStack中添加SPI配置: 配置如下: 接下来生成工程,配置rtt,添加spi驱动: st7735驱动 添加st77735驱动代码,这部分有大佬已经写好
wrfqwerty
2023-04-03 16:45:12
单工SPI通信协议的TFT屏幕使用方法与步骤
写入驱动程序,这块屏幕用到的驱动时ST7735,所以把不用的全部注释掉,具体的配置这里不再过多解释,关键是设置引脚的连接。查阅乐鑫官方的文档我们就可以知道,那些引脚可以作为SDA(数据传输),CS(片选),SCK(时钟线),DC(指令选择引脚),注意,ESP32的6到11号引脚虽然可以传输数.
werywer
2022-01-25 08:03:16
极简LCD屏驱动实战,快速上手智能设备屏幕交互!
Air780EPM已经支持的LCD有: ST7796/ST7789/ST7735/ST7735V/ST7735SGC9A01/GC9106I/GC9306X/ILI9486… 最新开发资料详见
2025-04-21 15:28:02
ESP8266MOD和BME280的电源问题如何解决?
法加载。如果我拔下电源引脚,Arduino IDE 可以连接并加载程序,但是,唉,当电源引脚重新连接时它不起作用。 我很困惑,因为 ESP 可以与带有 micro SD 的 TFT ST7735 一起正常工作,我认为这会消耗更大的功率。
hjhdf
2023-05-25 07:48:41
Renesas RA2L1开发板点亮ST7735 SPI LCD相关资料分享
®-M23@48MHz,256kFlash, 32k SRAM,板载Jlink调试器 (SWD)。 功能模块的硬件介绍 R7FA2L1拥有两组硬件SPI 传输位长度可选 8, 9, 10, 11, 12, 13
iettke
2022-10-26 14:56:59
AB32VG1系列之使用IO来进行模拟SPI接口
寸TFT屏幕,其主控是ST3375,使用SPI的方式驱动。具体SPI代码如下,工程代码详见GITEE// 发送8位数据void lcd7735_senddata(uint8_t data)&
CDCNKA
2022-07-04 11:35:52
STM32F103ZET6驱动的ST7735s一直出现白屏是为啥呢?怎么解决?
STM32F103ZET6驱动的ST7735s一直出现白屏是为啥呢?怎么解决?
深海零下一度1
2022-02-21 07:25:38
【立创·梁山派GD32F4】-0.96寸彩屏移植过程
1.1.1 模块来源 图1.1.1 实物展示 采购链接: ips 0.96寸TFT显示屏ips液晶屏0.96寸st7735 80x160 ips显示屏tft 资料下载链接:https
jf_31863339
2023-08-24 11:22:14
怎样在GD32F310开发板上驱动ST7735 SPI屏幕呢
USE_HORIZONTAL配置为0和1 为竖屏显示 配置为2和3位横屏显示2. 软件SPI和硬件SPI在st7735头文件中有一个宏USE_HARDWARESPI当定义这个宏的时候使用硬件SPI,注释掉
msvdsufsdf
2022-11-10 16:36:24