ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

STM32标准库驱动ST7735S 1.8寸TFT屏完整实战指南

STM32标准库驱动ST7735S 1.8寸TFT屏完整实战指南 1. 项目概述与硬件准备1.1 ST7735S这块屏是什么来头1.8寸TFT屏大概是市面上最便宜的彩色屏幕之一好几块钱就能买到一块很多人的入门外设就是它。ST7735S是这块屏上最常贴的驱动IC某些模块标签写着ST7735R有些写着ST7735S还有的干脆只写了“1.8 SPI TFT”本质上命令集基本一致用同一套驱动思路就能点亮。这块屏的分辨率是128x160SPI接口算上背光引脚一共8根线跟STM32的接法非常简单尤其是F103C8T6这种小板子GPIO够多、SPI1直接引到默认引脚几乎不需要飞线非常适合学标准库阶段拿来做练习。很多已经投身HAL库的同学可能会问2024年了还折腾标准库干嘛说实话ST官方现在主推HAL但学校课程、毕设、电赛还有老工程师手上的大批工程依然是标准库的天下。标准库的好处是代码直白、函数命名清楚把SPI和GPIO的配置摊开在眼前一次看明白外设是怎么被“配置出来”的。等你把标准库这套驱动的写法吃透了再切HAL库会发现底层原理完全共通的。我写这篇文章的目标很简单用一片STM32F103C8T6、一块ST7735S的1.8寸屏幕把从接线、初始化、画点画线、显示图片到Keil工程搭建的全流程跑通重点是把那些网上没人讲透的坑挨个踩给你看。整个过程不需要什么高级开发板最普通的“蓝板”加一个ST-Link或者串口下载器就够了。1.2 引脚功能与接线方案先看模块上这几个引脚到底是什么作用别急着插线。市面上的1.8寸屏模块引脚的丝印五花八门有标SCL/SDA的有标SCK/MOSI的有标A0的也有标DC的归根结底功能是同一套。模块引脚作用推荐接到STM32F103C8T6VCC屏幕电源通常3.3V3.3VGND地GNDCS片选低电平选中屏幕PA4RESET/RST硬件复位低电平复位PA3DC/A0命令/数据选择低命令高数据PA2SDA/MOSISPI数据线PA7SCK/SCLSPI时钟线PA5LED/BL背光控制PA1我推荐的引脚分配不是随便挑的有几个考虑。第一SPI1的硬件引脚默认是PA5(SCK)、PA6(MISO)、PA7(MOSI)屏幕没有MISO所以PA6空着刚好把PA7、PA5用起来不浪费。第二PA1到PA4这几个GPIO和JTAG下载口PA13/PA14/PA15完全不冲突烧录调试的时候不会互相干扰。第三这块屏模块上普遍没有电平转换芯片3.3V供电才能保证逻辑电平一致。如果你用的是其他型号的STM32只要选一个SPI外设把SCK和MOSI接到对应默认引脚上控制引脚随便挑几个空闲GPIO就行。但要注意ST-Link的SWDIO和SWCLK一般占用PA13和PA14别把DC或者CS接到这两个脚上否则下载一次就要拆线烦得很。1.3 供电与背光的几个注意点电源这个问题看着简单实际是白屏的头号杀手。很多模块上板载了一个低压差稳压器丝印上会写类似“662K”的三脚芯片这种模块VCC可以接到5V板上会转成3.3V给屏幕用。但如果是那种没有稳压芯片的“准裸屏”VCC就必须老老实实接3.3V接5V可能直接把驱动IC烧了。怎么快速判断看模块背面有没有三脚稳压芯片没有就默认3.3V。最稳的做法是全部按3.3V供电来不管有没有稳压都能跑。背光引脚LED/BL的处理也比较讲究。有些模块上LED引脚已经串好了限流电阻直接接3.3V背光常亮即可。如果模块上没有电阻直接接3.3V虽然一般也不会立刻烧灯但电流会偏大建议串一个几十欧的电阻。会玩一点的可以把PA1配置成PWM输出用定时器控制背光亮度效果还挺炫。显示器件的复位也要注意。RESET引脚是低电平复位正确的时序是先拉低10ms以上再拉高然后等待屏幕内部稳定再做软件初始化。这个时间不能太短我见过有人初始化代码里复位拉低就延时了1ms结果屏幕偶发白屏后来把复位拉低时间加长到50ms症状立刻消失。2. 驱动原理速通初始化到底在初始化什么2.1 SPI屏幕和单片机之间的“对话规则”要驱动屏幕先得让STM32和ST7735S之间建立通信。SPI是一种主从式的串行通信协议STM32是主机屏幕是从机主机发时钟和命令从机接收执行。这里绕不开两个基础概念时钟极性和采样边沿。ST7735S的数据手册明确支持SPI Mode 0和Mode 3。网上绝大多数例程用的是Mode 0即SCK空闲时是低电平数据在SCK的上升沿被屏幕采样。如果你把CPOL或CPHA配错了屏幕收不到正确的命令表现出来就是白屏或者乱码。前面表格里有个DC引脚全称Data/Command这个脚决定了主机当前发送的字节到底是命令还是数据。DC拉低时发送的字节被解释为命令比如“设置显示方向”“打开显示”这类指令DC拉高时发送的字节被解释为数据比如某个命令的参数、像素的颜色值。CS片选引脚也很关键低电平有效。整个SPI通信期间片选必须保持低电平通信结束再拉高。如果你把CS当高电平有效那就在逻辑上彻底反了屏幕永远不会响应。2.2 初始化序列逐条拆解网络上找ST7735S初始化代码能搜到一堆但很多人复制过来还是白屏原因就是不知道这些命令在干嘛出了问题没法调。我挑几个关键命令讲清楚。首先是0x01软件复位这个命令让屏幕内部控制逻辑重新启动。紧接着是0x11退出睡眠模式。ST7735S上电后默认处于睡眠模式屏幕背光不亮、显示不工作必须发0x11把它唤醒而且唤醒后要给足延时一般建议至少120ms不要省。然后是0x36设置显示方向MADCTL。这个命令控制像素扫描方向、RGB还是BGR颜色顺序。常见的0xC8表示竖屏正方向、BGR颜色顺序0xA8则可能是横屏方向。后面所有坐标的“左上角”都由这个命令决定改初始化里的MADCTL参数屏幕的显示方向就跟着变。0x3A是设置像素格式COLMOD。ST7735S支持12位、16位、18位颜色最常用的是0x05即16位RGB565每个像素用两个字节表示。后续写颜色数据时就是高字节在前、低字节在后和颜色的“高5位红、中间6位绿、低5位蓝”对应。一堆0xB1到0xC5的命令是帧率控制、电源控制、电压控制。这部分参数和屏幕的亮度、响应速度有关。商家给的例程里这些参数往往是根据他们那批屏幕调过的不同批次屏幕可能有微小差异。如果你发现屏幕亮但是颜色发白或者对比度不对多半要动这里的参数。初始化序列最后是0x13退出空闲模式、0x29打开显示。0x29发出后屏幕才会真正显示内容。如果你初始化了一堆命令但忘了发0x29屏幕就一直处于关显示状态呈现白屏。2.3 写像素、写窗口、写图片的完整流程单靠初始化命令屏幕还不会主动显示东西。要在屏幕上画东西必须告诉屏幕“我要在哪个区域写入什么颜色”。这就涉及到ST7735S的窗口机制。第一步用0x2A设置列地址范围也就是X方向的起始和结束坐标第二步用0x2B设置行地址范围也就是Y方向的起始和结束坐标第三步发0x2C命令屏幕就知道接下来的数据要填充到这个矩形窗口内。举个例子我要在1020这个点画一个红色像素过程是发0x2A参数是10,10发0x2B参数是20,20发0x2C然后连续发送0xF8和0x00两个字节。0xF800是RGB565格式的红色高字节0xF8在前低字节0x00在后。如果我要清屏把窗口设成整个屏幕X0到127Y0到159然后连续发送128x160个像素的颜色值就行了。发完最后一个像素屏幕自动停止接收数据下次通信前再重新设置窗口即可。理解了这个机制之后画点、画线、画矩形、填充矩形本质上都是“设置窗口发颜色数据”的排列组合。画点是把窗口设成一个像素填充是全屏窗口加循环发数据。这个思路是所有图形接口的基础后面写代码全是围绕这几条命令展开。3. 驱动代码实现从零开始手写3.1 管脚初始化时钟、GPIO、SPI一个都不能少摄像头对着屏幕干瞪眼没用先让STM32的外设把引脚功能设好。标准库写起来其实非常规矩就是“开时钟→配GPIO→配SPI→发命令”这一套组合拳。不涉及引脚重映射AFIO时钟可开可不开老代码习惯性会开不影响。GPIO部分SCK和MOSI是SPI1的复用功能引脚要配置成复用推挽输出DC、CS、RESET、LED这些是普通控制引脚配置成通用推挽输出速度统统设成50MHz。void LCD_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE); // 控制引脚DC(PA2) CS(PA4) RST(PA3) LED(PA1) GPIO_InitStructure.GPIO_Pin GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4; GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_PP; GPIO_Init(GPIOA, GPIO_InitStructure); // SPI功能引脚SCK(PA5) MOSI(PA7) GPIO_InitStructure.GPIO_Pin GPIO_Pin_5 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode GPIO_Mode_AF_PP; GPIO_Init(GPIOA, GPIO_InitStructure); }我见过很多人卡在这里启动时屏幕上一点反应都没有最后发现是SCK和MOSI的GPIO模式配成了通用推挽输出而不是复用推挽输出。用复用推挽GPIO的控制权才交给SPI外设否则SPI外设根本没法驱动这几根引脚。3.2 最底层的两个函数写命令和写数据底层通信函数是整个驱动的根基。设计上写命令和写数据的区别只在于DC引脚的电平。代码可以这样写void SPI_WriteByte(uint8_t data) { while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) RESET); SPI_I2S_SendByte(SPI1, data); while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) SET); } void LCD_WR_REG(uint8_t cmd) { LCD_DC_LOW(); LCD_CS_LOW(); SPI_WriteByte(cmd); LCD_CS_HIGH(); } void LCD_WR_DATA(uint8_t data) { LCD_DC_HIGH(); LCD_CS_LOW(); SPI_WriteByte(data); LCD_CS_HIGH(); }最底层的SPI_WriteByte里有个细节必须说清楚发送字节前要等发送缓冲区为空TXE标志置位发送后要等SPI不忙BSY标志清零。这个等待是必须的否则连续快速发送时第二个字节可能把第一个字节挤掉屏幕收到的数据就乱了显示出来就是花屏。我调试时会刻意把CS拉高放在每次字节发送之后。有些人图省事连续发多个字节时才拉一次CS但这样会把一个完整像素的高字节和低字节割裂成两次传输虽然ST7735S通常也能走进来的数据连续处理但容易出现边界状态。宁可慢一点每一笔数据都让CS清爽地拉高拉低排查问题会容易很多。3.3 初始化函数与显示函数代码有了写命令和写数据的底层函数LCD初始化主体就很好写了。下面这份初始化序列来自我实际调试中整理已经稳定用在好几批模块上了void LCD_Init(void) { // 硬件复位时序 LCD_RST_LOW(); delay_ms(100); LCD_RST_HIGH(); delay_ms(100); LCD_WR_REG(0x01); // 软件复位 delay_ms(150); LCD_WR_REG(0x11); // 退出睡眠模式 delay_ms(200); LCD_WR_REG(0x36); // 显示方向控制 LCD_WR_DATA(0xC8); // 竖屏正方向BGR颜色顺序 LCD_WR_REG(0x3A); // 像素格式 LCD_WR_DATA(0x05); // 16位/像素 LCD_WR_REG(0x20); // 反色关闭部分模块需改为0x21 LCD_WR_REG(0x13); // 退出空闲模式 delay_ms(50); LCD_WR_REG(0x29); // 打开显示 delay_ms(50); LCD_BLK_ON(); // 点亮背光 }这份初始化序列用了最精简的写法只保留对显示效果有决定性影响的命令。某些模块商家给的初始化会有一长串0xB1、0xC0之类的电源和伽马参数那通常是针对他们那批货调过的我在实际项目里用精简版多半也能点亮只是色彩可能偏一点。如果想追求更好的色彩还原再把电源参数加上去。显示函数里清屏和画点是最核心的两个原语。我建议把“设置窗口”单独封装一个函数后面所有显示函数都能复用void LCD_SetWindow(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1) { LCD_WR_REG(0x2A); LCD_WR_DATA(x0 8); LCD_WR_DATA(x0 0xFF); LCD_WR_DATA(x1 8); LCD_WR_DATA(x1 0xFF); LCD_WR_REG(0x2B); LCD_WR_DATA(y0 8); LCD_WR_DATA(y0 0xFF); LCD_WR_DATA(y1 8); LCD_WR_DATA(y1 0xFF); LCD_WR_REG(0x2C); } void LCD_DrawPoint(uint16_t x, uint16_t y, uint16_t color) { LCD_SetWindow(x, y, x, y); LCD_DC_HIGH(); LCD_CS_LOW(); SPI_WriteByte(color 8); SPI_WriteByte(color 0xFF); LCD_CS_HIGH(); } void LCD_Clear(uint16_t color) { LCD_SetWindow(0, 0, 127, 159); LCD_DC_HIGH(); LCD_CS_LOW(); for (uint32_t i 0; i 128 * 160; i) { SPI_WriteByte(color 8); SPI_WriteByte(color 0xFF); } LCD_CS_HIGH(); }画线、画矩形这些都是数学推算加画点调用的组合。直线可以按Bresenham算法或者简化的DDA算法来做矩形就是横竖四条边循环画点填充矩形就是嵌套循环按行列顺序填色。这些代码网上很多但建议自己写一遍逻辑不复杂写完对窗口机制的印象会深很多。字符显示稍微特殊一点。标准ASCII字符可以用8x16点阵字模每个字符用一个16字节的数组表示每一行对应数组的一个字节bit为1的位置显示前景色为0的位置显示背景色。显示过程就是按字符码从字模表里取数据逐行逐字节画点。代码上没有任何难度纯粹是“照着点阵表格填像素”的劳动。3.4 取模与图片显示图片显示最常用的工具是Img2Lcd这个软件。参数设置里输出类型选“C数组”颜色格式选“RGB565”最大宽高填128和160扫描方向按你屏幕的方向选“水平”或“垂直”。生成的数组是类似const unsigned char gImage_test[40960] {0x00, 0x00, ...}这样的一长串数据直接用就行。需要注意这个数组是按字节组织的两个字节凑一个像素高字节在前。如果直接用uint16_t*强转还要注意STM32是小端字节序直接从数组里取16位数值可能和高字节在前不匹配最保险的方式还是按字节逐个发送void LCD_ShowImage(uint16_t x, uint16_t y, uint16_t width, uint16_t height, const uint8_t *image) { LCD_SetWindow(x, y, x width - 1, y height - 1); LCD_DC_HIGH(); LCD_CS_LOW(); uint32_t pixelCount width * height; for (uint32_t i 0; i pixelCount * 2; i) { SPI_WriteByte(image[i]); } LCD_CS_HIGH(); }一张128x160的RGB565图片占了40960字节而STM32F103C8T6的Flash是64KB。存放一张全屏图片尚可但如果你工程里还塞了字库、RTOS、堆栈之类的东西Flash很可能不够。要做多张图片轮播要么把图片压缩成RGB332或者调色板格式要么外挂Flash芯片要么选中容量更大的STM32F103RCT6。4. 在Keil5里组装一个标准库工程4.1 标准库工程的目录结构与配置标准库工程搭建是很多人迈不过去的第一道坎其实套路非常固定。先准备好STM32F10x标准外设库版本用3.5.0即可。工程目录建议按“USER、CORE、FWLib、HARDWARE、SYSTEM”这样分USER放main.c和中断文件CORE放启动文件FWLib放标准库的源码HARDWARE放自己写的驱动SYSTEM放延时、串口这些公共模块。新建工程后在Manage Run-Time Environment或者手动添加文件时核心要添加的文件包括startup_stm32f10x_md.s启动文件、stm32f10x_gpio.c和stm32f10x_spi.c按实际用到的外设添加、stm32f10x_rcc.c、core_cm3.c。main.c和stm32f10x_it.c这些是必须的。C/C选项卡的Define里要填两个宏USE_STDPERIPH_DRIVER,STM32F10X_MD。第一个宏告诉标准库使用外设驱动第二个宏让标准库知道目标是中容量型号。忘记定义STM32F10X_MD的话编译会报一大堆类似“unknown type name GPIO_TypeDef”的错误。4.2 下载器驱动与烧录配置工程编译通过只是第一步烧录环节同样藏着不少坑。最常见的下载器是ST-Link和J-Link其次是串口下载配CH340或FT232芯片的USB转串口模块。ST-Link如果插上电脑在设备管理器里没有反应先换数据线试试。很多USB线只能充电不能传数据这个问题出现频率超高。接着检查驱动ST官网的STM32 ST-LINK Utility装好之后驱动一般会一起装好。J-Link同理装驱动时注意和Keil版本匹配。Keil里Debug选项选择ST-Link Debugger再进Settings如果能看到芯片ID说明连接正常。如果提示“No Target Connected”优先检查接线SWDIO和SWCLK有没有接反目标板有没有单独供电复位引脚是否被占用。串口下载就简单一些把BOOT0拉高、BOOT1拉低按复位进入系统存储器模式用FlyMcu或者STM32CubeProgrammer选串口下载。下载完记得把BOOT0跳回低电平否则程序不跑。用CH340时如果串口识别不了大概率也是驱动没装好重新装CH340驱动即可。4.3 第一个验证程序跑马灯亮起来我强烈建议在接屏之前先用一个最简单的程序验证硬件和工程环境是通的。不要一上来就初始化TFT否则出问题都不知道是屏幕挂了还是环境挂了。先写一个LED翻转或者串口打印的测试程序烧录进去能跑再进入屏幕调试阶段。环境确认无误后主函数就能写得很简洁int main(void) { delay_init(); LCD_GPIO_Init(); SPI1_Init(); LCD_Init(); LCD_Clear(0xF800); // 红色 delay_ms(1000); LCD_Clear(0x07E0); // 绿色 delay_ms(1000); LCD_Clear(0x001F); // 蓝色 delay_ms(1000); LCD_Clear(0xFFFF); // 白色 while (1) { LCD_DrawPoint(64, 80, 0x0000); delay_ms(500); } }如果程序跑到了这个状态屏幕应该依次显示红、绿、蓝、白最后屏幕中央出现一个黑色的点。能出现这些效果意味着从硬件接线到驱动代码的整条链路已经通了。之后再去折腾画线、显示字符、图片都是在同一个框架上做加法。5. 避坑指南白屏、花屏、颜色错乱逐一击破5.1 白屏从电源到初始化顺序的排查白屏是最让人头疼的问题因为原因太多了。我排个优先级先看背光再看复位最后查SPI通信和数据线。背光没亮是最容易判断的。屏幕白花花一片但完全不透光拿手电筒从屏幕背面照一下能看到内容的话就是背光或LED引脚没接对。LED/BL引脚必须处于高电平如果接的是普通GPIO确认初始化里把它拉高了。白屏但背光正常接下来怀疑复位。确认RESET引脚确实被拉低过、然后拉高了。如果复位引脚悬空或者直接接高电平屏幕内部逻辑可能没启动。我调试时会在RESET拉高后加一个200ms延时这个阈值对大多数模块来说绝对安全。ST7735S的MADCTL没配对也会白屏严格来说不会纯白但有些模块在MADCTL设置的扫描方向错乱时内容显示在视野之外看起来就是一片白。解决方法是把MADCTL参数在0x00、0xC8、0xA8、0x08之间多试几个只要有一个能出内容方向问题就锁定了。供电不稳定导致的白屏也常见。如果模块VCC直接从开发板的3.3V引脚取电开发板本身又带了一堆传感器3.3V纹波会变大。我遇到过屏幕初始化刚完成后短暂白屏后来在模块电源引脚旁边并了一个10uF和0.1uF电容问题就消失了。5.2 花屏SPI速率和信号质量的博弈花屏和白屏不一样花屏说明通信已经通了但数据在传输过程中出了问题。第一个要去查的是SPI速率。STM32F103的SPI1挂在APB2总线上最大72MHz分频系数可以从2一直分到256。初期调试我建议用SPI_BaudRatePrescaler_16也就是4.5MHz。这个速度对128x160的屏完全够用同时余量很大排除了高速时序问题。如果降到4.5MHz还是花屏往信号质量方向查。杜邦线超过10cm就容易引入串扰尤其是SCK和SDA平行飞线时时钟边沿的噪声会干扰数据线。我用过最长的一根杜邦线调试整整花了一个晚上最后换成短线就稳定了。实在要用长线的SCK和SDA之间隔一根地线效果立竿见影。还有一种“花屏”是屏幕内部RAM没有完全刷新导致的重影。连续高频刷新时如果清屏和画图函数之间没有预留一点时间老画面和新画面会叠在一起。解决办法是每次刷新前先调用LCD_Clear或者把这帧画面和上一帧画面的交接处处理好。5.3 颜色错乱RGB/BGR与反色开关颜色错乱是仅次于白屏的高频问题。最典型的是红色和蓝色互换这基本就是颜色顺序反了。MADCTL命令的bit3是BGR位置1表示BGR颜色顺序清0表示RGB顺序。我把MADCTL从0xC8改成0xC0或者从0xA8改成0xA0红蓝就能换回来。还有一种情况是整个画面像底片一样原来是白的显示成黑的原来是红的显示成青色的这是反色开关的问题。ST7735S有0x20和0x21两个命令0x20是关闭反色0x21是开启反色。不同厂家、不同批次的模块出厂默认状态不一样我在一块屏上用的是0x20换到另一块屏就必须用0x21否则颜色全反。偏色问题也可能和COLMOD配置有关。如果设成0x0618位你又只发16位数据颜色会错位偏色。务必统一成0x0516位。伽马参数也会导致偏色但那属于后级微调先用默认参数跑通再逐项调伽马曲线。5.4 显示方向与坐标错乱MADCTL逐位解析MADCTL这家伙既能影响颜色顺序又控制显示方向是踩坑重灾区。它的bit7是MY行方向反转bit6是MX列方向反转bit5是MV行列交换横屏竖屏切换bit3是BGR颜色顺序。我整理了一份常用参数表参数效果0x00竖屏左上角从物理左上角开始0xC8竖屏从物理右下角方向翻转常见模块的默认竖屏0xA8横屏行列交换具体还要看模块物理安装方向0x08横屏另一方向和0xA8互为镜像如果你设置的窗口和初始化的MADCTL不匹配最常见的现象是画面偏移到屏幕一侧或者上下颠倒。调试方法很简单清除屏幕后画一条从00到1010的斜线观察斜线是往哪个方向画的再对照参数表调整MY、MX、MV。这里有一个很容易忽略的点修改MADCTL之后你之前所有清屏和绘图函数里的坐标范围也可能要跟着变。竖屏时是128宽x160高横屏时是160宽x128高。如果代码里把宽度写死了128横屏模式下就会出坐标越界显示异常。5.5 购买模块时那些意想不到的问题最后聊几个藏在屏幕硬件本身的坑。第一是驱动IC型号商家标注ST7735S实际可能是ST7735R甚至ST7735S兼容芯片虽然命令族一致但某些寄存器默认值不同。网上很多人遇到同一份代码在一家店买屏能亮在另一家店买屏白屏多半就是这个原因。初始化代码尽量保留一整套电源和伽马参数会提高不同批次模块的兼容性。第二是模块上有时没有丝印标引脚名只标了1到8个数字。这时候只能对照商家详情页的接口定义或者用万用表量一下模块上有没有电源稳压芯片再推断VCC和GND。买多了你会发现那些几块钱的模块引脚定义甚至颜色顺序都可能是错的拿到手先验证一遍再写代码是省时间的最大技巧。第三也是我最想强调的千万不要在屏幕上电状态下反复插拔连接线。ST7735S的引脚抗静电能力一般热插拔轻则花屏重则直接烧坏驱动IC。我有一块屏就是因为频繁带电拔插最后彻底点不亮白白浪费了钱和时间。断电后接线、断电后改线这个习惯能从源头上避免一类玄学问题。整个工程调试下来我对ST7735S这块屏的定位是“低成本练手神器”。它的驱动难度适中不至于劝退新手又足够让你把SPI、GPIO、时序、取模这些基本功过一遍。等这块屏玩明白了再去驱动ILI9341、ST7789这些大屏你会发现除了分辨率不同、初始化寄存器参数不同核心思路几乎是一套。最后再分享一个我个人的小习惯每拿到一块新屏第一件事就是写一个全屏红绿蓝黑白五色轮换的测试程序跑一遍没问题再继续做功能。这个测试只要五分钟但能把后面一晚上的疑难杂症提前拦下来。屏幕驱动这个领域工程经验往往比代码本身更值钱。
返回列表