这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » 国产MCU » 【CW32F030C8T6】:成功驱动TFT屏幕

共1条 1/1 1 跳转至

【CW32F030C8T6】:成功驱动TFT屏幕

高工
2026-09-17 13:57:43     打赏

一: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 接口节省引脚,适合轻量显示场景。

不足:分辨率低、一般无触摸、色彩和亮度中等,不适合显示复杂图形与高密度文字。

二:硬件连接:

02-1 硬件原理图.png

  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");

五:实物展示

02-2 实物验证.png

六: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 里初始化命令序列、寄存器定义都写得非常详细,遇到问题翻手册往往比盲目改代码更高效。

6.3 感想

把一块屏幕点亮,表面看只是"跑通了",背后却涉及硬件接线、协议时序、芯片初始化等多个环节。这次调试让我体会到:嵌入式开发中"现象—定位—解决"的闭环思维很重要,每一个异常都有原因,耐心对照手册和时序就能找到答案。也希望这篇文档能帮助更多嵌入式爱好者少走弯路,顺利点亮自己的第一块屏幕。



关键词: CW32F030C8T6     驱动     屏幕    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]