一:TFT屏幕介绍
1.77 英寸 TFT 液晶屏是一款常见的小尺寸彩色显示屏模块,分辨率为 160×128(通常也写作 128×160,即横向 160 列、纵向 128 行),采用 TFT(薄膜晶体管)真彩液晶技术,内置 ST7735S 驱动芯片,通过 SPI 或 8 位并口与主控通信。因其体积小、功耗低、价格便宜,广泛用于 Arduino、ESP32、STM32 等嵌入式学习项目和小型电子设备中。
1.1 基本参数
屏幕尺寸:1.77 英寸(对角线)
分辨率:160×128(128×160 点阵,RGB 像素)
显示类型:TFT 真彩液晶(TN 模式)
颜色数:65K(RGB565)~ 262K 色
有效显示区:约 28.03 × 35.04 mm
像素尺寸:约 0.219 × 0.219 mm
驱动芯片:ST7735S(最常见)
接口:4 线 SPI(最少 4 个 IO)或 8 位并口(8080)
工作电压:逻辑 3.3V(部分模块兼容 5V)
背光:白色 LED,支持 PWM 调光
可视方向:多为 6 点钟方向(视具体型号)
响应时间:约 16ms 级
1.2 驱动芯片与接口
该屏幕大多内置 ST7735S 驱动芯片,芯片内部集成显存(GRAM),主控只需按接口时序写入像素数据即可完成显示,无需外接显存。常见接口形式:
4 线 SPI:最少只需 4 个 IO(CS、DC、SDA、SCK),适合引脚紧张的 Arduino / ESP32 等主控;
8 位并口(8080):传输速度快,但占用引脚多,常用于 STM32 等资源充裕的主控。
1.3 引脚定义(常见 8 脚 SPI 模块)
VCC:电源正极,接 3.3V(部分模块可接 5V)
GND:电源地
CS:片选信号,低电平有效
RESET:复位信号,低电平复位
DC(A0):数据/命令选择:高电平写数据,低电平写命令
SDA(MOSI):SPI 数据输入
SCK:SPI 时钟
LED(BLK):背光控制,可接 PWM 调亮度,不接则常亮
1.4 常见应用
嵌入式学习:Arduino、ESP32、STM32 入门显示实验;
小型手持设备:电子时钟、温度计/温湿度计、计步器;
仪表与面板:电压表、电流表、充电宝容量显示;
玩具与消费电子:MP3/MP4、遥控器、迷你游戏机等。
1.5 使用要点
驱动库:Arduino 可用 Adafruit ST7735、TFT_eSPI 等库;STM32 可移植开源驱动;
初始化:上电后需按芯片手册发送初始化命令序列(复位 → 关显示 → 设置扫描方向/显存窗口 → 开显示);
电平匹配:逻辑电平多为 3.3V,若主控为 5V(如 51 单片机)建议先确认模块是否兼容或做电平转换;
中文显示:需使用取模字库或 U8g2 等带字体的库。
1.6 优点与不足
优点:价格低、功耗小、体积小,SPI 接口节省引脚,适合轻量显示场景。
不足:分辨率低、一般无触摸、色彩和亮度中等,不适合显示复杂图形与高密度文字。
二:硬件连接:
PB6_MISO--->>TFT --SCL/SCK
PB7_MOSI--->>TFT --SDA/DIN
PB5_CS--->>TFT --CS/CE
PB11--->>TFT --RS/DC
PB10--->>TFT --RST
三:CW32F030的SPI知识分享
串行外设接口(SPD)是一种同步串行数据通信接口,常用于MCU与外部设备之间进行同步串行通信。CW32F030内部集成2个串行外设SPI接口,支持双向全双工、单线半双工和单工通信模式,可配置MCU作为主机或从机,支持多主机通信模式,支持直接内存访问(DMA)。
特点:
支持主机模式、从机模式
支持全双工、单线半双工、单工
可选的4位到16位数据帧宽度
支持收发数据LSB或MSB在前
可编程时钟极性和时钟相位
主机模式下通信速率高达PCLK/2
从机模式下通信速率高达PCLK/4
支持多机通信模式
8个带标志位的中断源
支持直接内存访问(DMA)
四:软件代码:4.1 SPI总线发送一个字节
//向SPI总线传输一个8位数据
void SPI_WriteData(unsigned char Data)
{
unsigned char i=0;
for(i=8;i>0;i--)
{
if(Data&0x80)
LCD_SDA_SET; //输出数据
else LCD_SDA_CLR;
LCD_SCL_CLR;
LCD_SCL_SET;
Data<<=1;
}
}4.2 通过SPI向屏幕发送数据,命令信息
//向液晶屏写一个8位指令
void Lcd_WriteIndex(unsigned char Index)
{
//SPI 写命令时序开始
LCD_CS_CLR;
LCD_RS_CLR;
SPI_WriteData(Index);
LCD_CS_SET;
}
//向液晶屏写一个8位数据
void Lcd_WriteData(unsigned char Data)
{
LCD_CS_CLR;
LCD_RS_SET;
SPI_WriteData(Data);
LCD_CS_SET;
}
//向液晶屏写一个16位数据
void LCD_WriteData_16Bit(unsigned int Data)
{
LCD_CS_CLR;
LCD_RS_SET;
SPI_WriteData(Data>>8); //写入高8位数据
SPI_WriteData(Data); //写入低8位数据
LCD_CS_SET;
}
void Lcd_WriteReg(unsigned char Index,unsigned char Data)
{
Lcd_WriteIndex(Index);
Lcd_WriteData(Data);
}4.3 向屏幕发送写字符串函数Gui_DrawFont_GBK16(15,5,BLACK,GRAY0,"HELLO world"); Gui_DrawFont_GBK16(15,25,RED,GRAY0,"LCD OK DISPLAY"); Gui_DrawFont_GBK16(15,45,BLUE,GRAY0,"KEYBOADRD007");
五:实物展示

六:SPI调试TFT屏的调试心得与感想
从点亮屏幕的第一行字到完整显示 "HELLO world",整个过程让我对 SPI 通信和 TFT 屏的驱动有了更直观的理解。这里记录下调试过程中的问题、解决思路和一些感想,希望能给同样使用 CW32F030 驱动 TFT 屏的同学一些参考。6.1 调试中遇到的问题与解决
1. 上电白屏/无显示:第一次上电后屏幕没有任何反应。检查发现是复位时序问题——ST7735S 上电后需要先拉低 RST 再拉高,并保持足够的复位时间,若复位引脚悬空或复位时序不对,屏幕就会停留在未知状态。
2. 显示花屏、颜色错乱:出现花屏大多是 SPI 的时钟极性(CPOL)和相位(CPHA)设置不对,或软件模拟时序里 SCL 翻转时机与数据位不同步。模拟 SPI 时务必保证"数据先稳定、时钟再跳变",每一位都要按这个顺序来。
3. 文字方向不对、图像翻转:ST7735S 的扫描方向和显存地址映射可以通过控制指令(如 MADCTL 0x36)设置,横屏/竖屏、镜像都在这里调整,而不是在代码里改坐标硬凑。
4. 背光不亮:LED 背光引脚没有接高电平或没有使能。背光引脚接 PWM 可以调亮度,不接 PWM 时也要默认接高电平才能点亮屏幕。
5. 接线错误导致通信失败:一开始把 MOSI 和 SCK 接反,屏幕完全无响应。后来对照模块丝印逐一确认:SDA/MOSI→PB7、SCL/SCK→PB6、CS→PB5、RS/DC→PB11、RST→PB10,确认接线无误后再上电调试,问题立刻解决。
6.2 调试心得
先点亮再优化:先用最简单的单色填充或点屏测试验证通信和初始化是否正常,再逐步加入字库、图形等复杂功能,不要一上来就调复杂的显示逻辑。
善用示波器或逻辑分析仪:抓取 SCL、SDA、CS 的波形,对比时序是否符合预期,可以快速区分是初始化问题还是通信时序问题。
软件模拟 SPI 是理解时序的好方式:代码中用 GPIO 模拟 SPI 虽然速度不如硬件 SPI,但每一个 bit 的翻转过程都看得清清楚楚,非常适合学习和理解 SPI 协议本身。
驱动芯片手册是最好的老师:ST7735S 的 datasheet 里初始化命令序列、寄存器定义都写得非常详细,遇到问题翻手册往往比盲目改代码更高效。
我要赚赏金
