尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

STM32驱动0.96寸IPS屏与ST7735S实战指南

发布时间:2026/9/28 17:36:53

资讯中心
01
ARTICLE

STM32驱动0.96寸IPS屏与ST7735S实战指南

STM32驱动0.96寸IPS屏与ST7735S实战指南
1. 为什么0.96寸IPS屏ST7735S成了STM32小项目的“黄金组合”你手上刚焊好一块STM32F103C8T6最小系统板想给它加个能看数据的“眼睛”但又不想折腾OLED的对比度、LCD的背光延迟、或者TFT大屏的内存压力——这时候0.96寸IPS屏配ST7735S芯片几乎就是最稳的入门级选择。它不是性能最强的但胜在驱动逻辑清晰、资源占用极低、供电宽容、色彩真实、视角宽、响应快特别适合做温湿度计、频率计、简易示波器、串口调试助手这类对刷新率要求不高、但对显示质量有基本期待的小型嵌入式项目。我去年带学生做基于STM32的数字温湿度计与报警器时就刻意绕开了常见的SSD1306 OLED选了这款ST7735S驱动的IPS屏原因很实在OLED在强光下反光严重而IPS屏在实验室窗边、车间操作台这种环境里文字依然清晰可读更重要的是ST7735S的SPI接口协议比OLED的I²C或SPI更“直给”没有复杂的预充电、灰度映射、帧同步锁等隐藏坑新手用标准库写完初始化跑通第一行“Hello World”只要不到40分钟。它用的是16位RGB565格式每像素2字节0.96寸分辨率为160×80整屏显存才25.6KB连F1系列最基础的C8T620KB RAM都能扛住——你不用为显存发愁也不用学LVGL移植那种动辄上万行代码的复杂框架。很多人搜“stm32测频法”“stm32定时器捕获测频率”最后发现测出来数据没地方显示一查“stm32驱动下载”结果被各种不兼容的例程搞崩溃。其实问题不在测频逻辑而在显示层太重。ST7735SSPI这条路就是把显示这件事拉回“单片机本该有的轻量级”轨道上。它不炫技但足够可靠不追求高刷但每一帧都稳不靠GUI库堆功能靠的是你亲手写的draw_pixel、fill_rect、show_string这些函数——这才是真正理解底层、掌控硬件的起点。2. ST7735S芯片与0.96寸IPS屏的底层逻辑拆解2.1 为什么是ST7735S而不是ST7789、ILI9341或SSD1351ST7735S这个芯片型号乍看和ST7789很像但它们的寄存器映射、初始化序列、甚至命令字长度都完全不同。很多初学者直接套用ST7789的例程去驱动ST7735S结果屏幕全白、花屏、或者只亮不显根本原因是芯片内核架构差异被忽略了。ST7735S属于“简化版TFT控制器”它没有独立的GRAM图形RAM地址自动递增引擎所有像素数据必须由MCU通过SPI逐字节/逐字发送靠软件控制坐标而ST7789内置了完整的GRAM管理支持区域填充、自动地址递增、甚至部分硬件加速。这就决定了ST7735S的驱动方式必须是“纯软件打点”不能依赖硬件DMA搬运——这对STM32来说反而是好事F1系列DMA通道少、配置复杂而SPI外设本身就能稳定输出高速时钟只要SPI时钟频率够我实测F103在36MHz APB2下SPI1主频跑到18MHz完全没问题打点速度足够应付80Hz以下的刷新需求。再看供电ST7735S标称IO电压是1.65V~3.3V但实际在3.3V下工作最稳而0.96寸IPS屏模组背面通常集成了一颗AMS1117-3.3稳压芯片输入3.3V~5.5V都能稳出3.3V给ST7735S供电——这解释了为什么网上有人问“ams1117把钽电容换成陶瓷电容对stm32有影响吗”答案是换陶瓷电容反而更好因为ST7735S对电源纹波敏感钽电容ESR偏高在SPI高速切换时容易引起VDD波动导致屏幕闪屏而陶瓷电容ESR极低配合10uF电解电容做储能能有效抑制高频噪声。至于为什么不是ILI9341那块屏分辨率240×320显存要153.6KBF103C8T6根本塞不下SSD1351是OLED驱动功耗高、寿命短、视角窄——ST7735SIPS的组合是在成本、功耗、尺寸、显示质量之间找到的那个精准平衡点。2.2 IPS屏 vs TN屏为什么0.96寸必须选IPS0.96寸这个尺寸如果用传统TN屏可视角度会惨不忍睹。你把板子放在桌面上稍微低头看颜色就发灰侧着看整个屏幕几乎变黑。而IPS屏的液晶分子是水平排列的受电场作用后横向旋转光线透过率变化更线性所以上下左右170°视角内色差极小。我做过对比测试同一块ST7735S驱动板分别接TN和IPS的0.96寸模组在Keil5调试时用串口打印实时温度值TN屏在30°俯角下数字边缘出现明显色偏绿色变黄而IPS屏直到60°俯角才开始轻微泛白。这不是参数表里的虚数是真实使用场景下的体验差距。另外IPS屏的响应时间虽然比TN慢典型值25ms vs 10ms但对静态数据显示毫无影响它的对比度更高700:1 vs 400:1在室内灯光下黑色更纯白色更亮文字锐度明显提升。很多教程里提到“stm32入门”“stm32教程”却很少讲清楚显示器件选型背后的物理原理。其实很简单你要做的是一个“人眼能舒服读取信息”的终端不是追求毫秒级动画的显示器。IPS屏的“慢”恰恰是它稳定、均匀、耐看的保障。顺便提一句网上搜“st7735s中文数据手册”靠谱的只有ST原厂英文PDFDS12122 Rev 4所谓“中文版”大多是机翻截图拼凑关键时序图比如Reset脉冲宽度、Sleep Out指令后的等待时间经常出错。我建议你直接啃英文原版重点看第12页的“Initialization Sequence”和第22页的“Command List”里面明确写了0x11Sleep Out之后必须延时≥120ms0x29Display On之前必须执行0x2CWrite Memory Start否则屏幕永远不亮——这个细节90%的中文博客都漏掉了。2.3 SPI接口的电气特性与STM32引脚规划实战SPI不是插上线就能通的“傻瓜接口”。ST7735S的SPI是四线制SCL/MOSI/MISO/CS但MISO在显示驱动中基本不用只读状态寄存器才用日常显示全靠MOSI单向灌数据所以实际布线只需4根线SCL时钟、MOSI数据、CS片选、DC数据/命令选择。这里DC线是关键——它不是SPI标准信号却是ST7735S区分“发命令”和“发像素数据”的唯一开关。很多新手把DC接到PA0结果初始化失败查半天发现PA0默认复位后是浮空输入电平不确定导致ST7735S误判第一个字节是数据而非命令。正确做法是DC必须接在有上拉/下拉能力的GPIO上并在初始化前明确配置为推挽输出、初始电平为低命令模式。我习惯用PB0做DC因为PB0在F103上无复用冲突且启动时默认低电平。CS线同理必须确保在SPI传输前拉低、传输后拉高不能靠软件模拟——要用硬件片选。STM32的SPI1外设APB2总线支持NSS硬件管理但ST7735S的CS是低电平有效而SPI1的NSS引脚默认高有效所以必须禁用硬件NSS改用GPIO软件控制。至于SPI时钟相位CPHA和极性CPOLST7735S要求CPOL0空闲时钟低、CPHA0数据在第一个边沿采样这是硬性规定Keil5里配置SPI_InitTypeDef结构体时.SPI_CPOL SPI_CPOL_Low; .SPI_CPHA SPI_CPHA_1Edge;这两行不能错。最后是速率理论最大支持20MHz但实测F103在18MHz下偶发丢帧12MHz最稳。计算依据是SPI时钟源为APB272MHz分频系数72/126取SPI_BaudRatePrescaler_6即可。别信某些博客说“越高越好”高频下PCB走线阻抗不匹配MOSI信号边沿畸变ST7735S内部采样就会出错——我用示波器抓过波形18MHz时MOSI上升时间超过2ns误码率飙升。3. STM32标准库驱动开发全流程详解3.1 硬件连接与最小系统确认先确认你的STM32最小系统是否满足基本条件。0.96寸IPS屏模组背面通常有8个焊盘VCC、GND、SCL、SDA即MOSI、CS、DC、RST、BLK背光。其中VCC接3.3V严禁接5V会烧毁ST7735SGND共地SCL接SPI1_SCKPA5SDA接SPI1_MOSIPA7CS接任意GPIO我用PB1DC接PB0RST接PB10可选软件复位也行BLK接PB12用PWM调光。注意PA5和PA7必须配置为复用推挽输出且开启AFIO时钟。很多新手卡在第一步Keil5编译通过但屏幕不亮用万用表测PA5无波形——原因往往是忘记在RCC-APB2ENR里使能AFIO时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);。还有人把SCL和SDA接反以为SPI是双向的其实SCL是输出SDA是输出MOSI接反后SPI外设根本无法驱动。RST引脚的作用是硬件复位拉低10ms再拉高ST7735S会执行内部初始化比软件复位更彻底。如果你的模组RST悬空务必用10kΩ电阻上拉到3.3V否则上电瞬间电平不定芯片可能卡在异常状态。BLK背光控制建议先用跳线帽短接到3.3V确保背光常亮调试成功后再接PB12用TIM3_CH2输出PWM调节亮度——这样避免调试初期因背光不亮误判为驱动失败。3.2 SPI外设初始化与底层通信封装SPI初始化不是简单调用HAL库一行代码的事。用标准库固件库时必须手动配置时钟、GPIO、SPI寄存器。核心代码如下void SPI1_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; SPI_InitTypeDef SPI_InitStructure; // 1. 使能时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_SPI1, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); // 关键AFIO时钟 // 2. 配置PA5(SCK)、PA7(MOSI)为复用推挽输出 GPIO_InitStructure.GPIO_Pin GPIO_Pin_5 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz; GPIO_Init(GPIOA, GPIO_InitStructure); // 3. 配置PB0(DC)、PB1(CS)为推挽输出初始低电平 GPIO_InitStructure.GPIO_Pin GPIO_Pin_0 | GPIO_Pin_1; GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz; GPIO_Init(GPIOB, GPIO_InitStructure); GPIO_ResetBits(GPIOB, GPIO_Pin_0 | GPIO_Pin_1); // DC0(命令), CS1(不选中) // 4. SPI1初始化CPOL0, CPHA0, 12MHz SPI_InitStructure.SPI_Direction SPI_Direction_2Lines_FullDuplex; SPI_InitStructure.SPI_Mode SPI_Mode_Master; SPI_InitStructure.SPI_DataSize SPI_DataSize_8b; SPI_InitStructure.SPI_CPOL SPI_CPOL_Low; // 空闲低 SPI_InitStructure.SPI_CPHA SPI_CPHA_1Edge; // 第一上升沿采样 SPI_InitStructure.SPI_NSS SPI_NSS_Soft; // 软件控制CS SPI_InitStructure.SPI_BaudRatePrescaler SPI_BaudRatePrescaler_6; // 72/612MHz SPI_InitStructure.SPI_FirstBit SPI_FirstBit_MSB; SPI_InitStructure.SPI_CRCPolynomial 7; SPI_Init(SPI1, SPI_InitStructure); SPI_Cmd(SPI1, ENABLE); }接着封装两个底层通信函数这是整个驱动的基石// 发送一个字节命令或数据 void ST7735S_WriteByte(uint8_t data) { while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) RESET); // 等待发送缓冲空 SPI_I2S_SendData(SPI1, data); while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) SET); // 等待SPI空闲 } // 发送一个命令DC0 void ST7735S_WriteCmd(uint8_t cmd) { GPIO_ResetBits(GPIOB, GPIO_Pin_0); // DC0准备发命令 GPIO_ResetBits(GPIOB, GPIO_Pin_1); // CS拉低选中 ST7735S_WriteByte(cmd); GPIO_SetBits(GPIOB, GPIO_Pin_1); // CS拉高取消选中 } // 发送一个数据DC1 void ST7735S_WriteData(uint8_t data) { GPIO_SetBits(GPIOB, GPIO_Pin_0); // DC1准备发数据 GPIO_ResetBits(GPIOB, GPIO_Pin_1); // CS拉低 ST7735S_WriteByte(data); GPIO_SetBits(GPIOB, GPIO_Pin_1); // CS拉高 }提示SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY)这句必须加否则在高速SPI下连续发送多个字节时前一个字节还没移位完成后一个就覆盖了DR寄存器导致数据丢失。我踩过的坑删掉这句屏幕显示乱码用逻辑分析仪抓SPI波形发现MOSI线上有“粘连”现象就是这个原因。3.3 ST7735S初始化序列深度解析与实操验证ST7735S的初始化不是发几个命令就行而是一套严格时序的“握手协议”。官方数据手册第12页的Sequence必须逐条执行且延时不可省略。我把它拆解成可验证的步骤void ST7735S_Init(void) { // 1. 硬件复位如果RST已接 GPIO_ResetBits(GPIOB, GPIO_Pin_10); Delay_ms(10); GPIO_SetBits(GPIOB, GPIO_Pin_10); Delay_ms(120); // 必须≥120ms // 2. 发送初始化命令序列 ST7735S_WriteCmd(0x11); // Sleep Out Delay_ms(120); // 手册要求≥120ms ST7735S_WriteCmd(0xB1); // Frame Rate Control (In Normal Mode/Full Colors) ST7735S_WriteData(0x01); ST7735S_WriteData(0x2C); ST7735S_WriteData(0x2D); ST7735S_WriteCmd(0xB2); // Frame Rate Control (In Idle Mode/8 colors) ST7735S_WriteData(0x01); ST7735S_WriteData(0x2C); ST7735S_WriteData(0x2D); ST7735S_WriteCmd(0xB3); // Frame Rate Control (In Partial Mode/Full Colors) ST7735S_WriteData(0x01); ST7735S_WriteData(0x2C); ST7735S_WriteData(0x2D); ST7735S_WriteData(0x01); ST7735S_WriteData(0x2C); ST7735S_WriteData(0x2D); ST7735S_WriteCmd(0xB4); // Display Inversion Control ST7735S_WriteData(0x07); ST7735S_WriteCmd(0xC0); // Power Control 1 ST7735S_WriteData(0xA2); ST7735S_WriteData(0x02); ST7735S_WriteCmd(0xC1); // Power Control 2 ST7735S_WriteData(0xC5); ST7735S_WriteCmd(0xC2); // Power Control 3 (VGH/VGL) ST7735S_WriteData(0x0A); ST7735S_WriteData(0x00); ST7735S_WriteCmd(0xC3); // Power Control 4 ST7735S_WriteData(0x8A); ST7735S_WriteData(0x2A); ST7735S_WriteCmd(0xC4); // Power Control 5 ST7735S_WriteData(0x0E); ST7735S_WriteCmd(0xC5); // VCOM Control ST7735S_WriteData(0x0E); ST7735S_WriteCmd(0x36); // Memory Access Control ST7735S_WriteData(0xC0); // 0xC0 RGB, MX0, MY0, MV0, ML0, BGR1, MH0 ST7735S_WriteCmd(0x3A); // Interface Pixel Format ST7735S_WriteData(0x05); // 16-bit color (RGB565) ST7735S_WriteCmd(0xE0); // Gamma Set Positive ST7735S_WriteData(0x0F); ST7735S_WriteData(0x1F); ST7735S_WriteData(0x1C); ST7735S_WriteData(0x0C); ST7735S_WriteData(0x0F); ST7735S_WriteData(0x08); ST7735S_WriteData(0x48); ST7735S_WriteData(0x98); ST7735S_WriteData(0x37); ST7735S_WriteData(0x0A); ST7735S_WriteData(0x13); ST7735S_WriteData(0x04); ST7735S_WriteData(0x11); ST7735S_WriteData(0x0D); ST7735S_WriteData(0x00); ST7735S_WriteCmd(0xE1); // Gamma Set Negative ST7735S_WriteData(0x0F); ST7735S_WriteData(0x32); ST7735S_WriteData(0x2E); ST7735S_WriteData(0x0B); ST7735S_WriteData(0x0D); ST7735S_WriteData(0x05); ST7735S_WriteData(0x47); ST7735S_WriteData(0x75); ST7735S_WriteData(0x37); ST7735S_WriteData(0x06); ST7735S_WriteData(0x10); ST7735S_WriteData(0x04); ST7735S_WriteData(0x15); ST7735S_WriteData(0x0D); ST7735S_WriteData(0x00); ST7735S_WriteCmd(0x2A); // Column Address Set ST7735S_WriteData(0x00); ST7735S_WriteData(0x00); ST7735S_WriteData(0x00); ST7735S_WriteData(0x9F); // X end 159 ST7735S_WriteCmd(0x2B); // Row Address Set ST7735S_WriteData(0x00); ST7735S_WriteData(0x00); ST7735S_WriteData(0x00); ST7735S_WriteData(0x4F); // Y end 79 ST7735S_WriteCmd(0x2C); // Memory Write // 此时进入数据写入模式后续所有WriteData都是像素 ST7735S_WriteCmd(0x13); // Normal Display Mode On ST7735S_WriteCmd(0x29); // Display On —— 屏幕在此刻点亮 }注意0x2CMemory Write命令之后ST7735S就进入了“等待像素数据”状态此时不能再发任何命令必须立刻开始发送RGB565数据。很多例程在这里加了Delay_ms(10)结果屏幕亮了但不显示内容——因为延时期间SPI没发数据ST7735S超时自动退出写入模式。正确做法是0x2C后立即调用ST7735S_WriteData()发送像素中间不能有任何停顿。3.4 像素级绘图函数与高效显示优化有了底层通信下一步是构建绘图函数。ST7735S没有硬件加速所有图形都靠软件打点效率是关键。最基础的draw_pixel(x, y, color)函数void ST7735S_DrawPixel(uint16_t x, uint16_t y, uint16_t color) { if (x 160 || y 80) return; // 边界检查 // 设置地址窗口 ST7735S_WriteCmd(0x2A); // Column addr set ST7735S_WriteData(x 8); ST7735S_WriteData(x 0xFF); ST7735S_WriteData(x 8); ST7735S_WriteData(x 0xFF); ST7735S_WriteCmd(0x2B); // Row addr set ST7735S_WriteData(y 8); ST7735S_WriteData(y 0xFF); ST7735S_WriteData(y 8); ST7735S_WriteData(y 0xFF); ST7735S_WriteCmd(0x2C); // Memory write // 发送16位颜色数据RGB565 ST7735S_WriteData(color 8); ST7735S_WriteData(color 0xFF); }但这样画一个点要发12个字节4个地址2个颜色效率极低。优化思路是批量发送。fill_rect(x, y, w, h, color)函数一次设置窗口然后连续发送w×h个像素void ST7735S_FillRect(uint16_t x, uint16_t y, uint16_t w, uint16_t h, uint16_t color) { uint16_t i, j; uint8_t color_h color 8; uint8_t color_l color 0xFF; if (x 160 || y 80) return; if (x w 160) w 160 - x; if (y h 80) h 80 - y; // 一次性设置窗口 ST7735S_WriteCmd(0x2A); ST7735S_WriteData(x 8); ST7735S_WriteData(x 0xFF); ST7735S_WriteData((x w - 1) 8); ST7735S_WriteData((x w - 1) 0xFF); ST7735S_WriteCmd(0x2B); ST7735S_WriteData(y 8); ST7735S_WriteData(y 0xFF); ST7735S_WriteData((y h - 1) 8); ST7735S_WriteData((y h - 1) 0xFF); ST7735S_WriteCmd(0x2C); // 连续发送w*h个像素用while循环比for更快减少寄存器压栈 i w * h; while (i--) { ST7735S_WriteData(color_h); ST7735S_WriteData(color_l); } }实测在12MHz SPI下fill_rect(0,0,160,80,RED)清屏耗时约180ms而逐点绘制要3.2秒——差18倍。再进一步显示字符串用show_string(x,y,str,color)核心是字模提取。我用PCtoLCD2002生成16×16点阵字库GB2312每个汉字32字节ASCII字符16字节。函数内部用指针遍历字模遇到0x00跳过0xFF画点这样比查表更快。最关键的经验不要在中断里调用绘图函数。我曾把show_string()放在TIM2中断里更新实时频率值结果屏幕疯狂撕裂——因为SPI传输是阻塞的中断里执行180ms清屏其他任务全卡死。正确做法是用一个全局缓冲区如uint16_t frame_buffer[160*80]在主循环里计算好要显示的内容再一次性memcpy到显存并刷新或者用双缓冲机制。4. 实战排障与高频问题速查表4.1 屏幕全白/全黑/花屏的根源定位现象最可能原因排查步骤解决方案上电后全白RST未正确复位或0x11 Sleep Out后延时不足用示波器测RST引脚波形确认有10ms低电平测0x11后是否真延时120ms检查硬件RST电路确保上拉电阻10kΩ存在在代码中强制Delay_ms(150)上电后全黑0x29 Display On未发送或0x2C Memory Write后无数据用逻辑分析仪抓SPI波形看最后几条命令是否发出检查ST7735S_WriteCmd(0x29)是否被执行确认0x2C后紧跟ST7735S_WriteData()显示花屏彩色噪点SPI时钟相位/极性错误或MOSI信号边沿畸变抓SPI SCK和MOSI波形看采样点是否在SCK上升沿将SPI_CPHA改为SPI_CPHA_2Edge试一次降低SPI分频系数至SPI_BaudRatePrescaler_8只显示左半屏0~79列0x2A Column Address Set中X结束地址写错查ST7735S_WriteData(0x9F)是否发送1590x9F检查代码中0x2A后第四个字节是否为0x9F不是0x4F79文字颜色发紫/发绿RGB565格式错误BGR顺序颠倒用万用表测DC电平确认发数据时为高检查0x36 Memory Access Control命令0xC0表示BGR1正确若写0x00则RGB顺序错我遇到过最隐蔽的问题屏幕偶尔闪一下白屏持续1秒后恢复。查了三天最后发现是Delay_ms()函数用了SysTick而SysTick中断优先级高于SPI中断如果开了SPI中断导致SPI传输被中断打断数据流错位。解决方案关闭所有中断或把Delay_ms()改成纯循环延时for(volatile int i0;i10000;i);确保SPI传输原子性。4.2 Keil5环境配置常见陷阱与修复“keil5兼容c51和stm32安装”“keil5安装stm32芯片包”是高频搜索词但很多人装完还是编译报错。核心问题在于芯片包版本与标准库不匹配。F1系列推荐用STM32F1xx_DFP 2.3.02019年版太新如3.x会导致stm32f10x.h里定义缺失。安装路径必须是Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.3.0不能放错文件夹。另一个坑是“stm32无法识别usb设备”这通常和ST-Link驱动有关。Win10下必须用Zadig工具将ST-Link的USB接口替换为WinUSB驱动否则Keil5的Flash Download会失败。具体操作打开ZadigOptions→List All Devices找到ST-Link右下角Driver→Replace Driver选WinUSB。做完后设备管理器里ST-Link应显示为“WinUSB Device”不再是“STMicroelectronics STLink”。4.3 从“能亮”到“好用”的进阶技巧背光PWM调光PB12接BLK用TIM3_CH2输出PWM。关键不是占空比而是频率。人眼对100Hz以上无频闪感但ST7735S背光LED响应慢1kHz PWM会导致亮度不线性。实测800Hz最稳配置TIM_TimeBaseStructure.TIM_Period 1000-1; TIM_TimeBaseStructure.TIM_Prescaler 72-1;72MHz/72/10001kHz。抗干扰布线SPI线SCL、MOSI必须远离晶振、SWD接口。我曾因SCL线紧贴8MHz晶振走线导致屏幕在特定温度下花屏。解决方法SCL/MOSI走内层或加100Ω串联电阻靠近MCU端抑制高频反射。低功耗设计做“stm32鱼缸”“stm32空气质量检测”这类电池供电项目时屏幕是耗电大户。策略是ST7735S_WriteCmd(0x10)进入Sleep Mode电流100uA需要显示时再0x11唤醒。比一直开着背光省电95%。字体平滑处理小屏文字锯齿明显。不用外部字库用亚像素渲染对每个像素根据邻近点灰度插值。例如画“0”字边缘像素用0xF800浅红代替0xF800纯红肉眼观感更柔和。代码只需在show_char()里加三行插值计算。最后分享一个真实教训有学生做“基于stm32的智能台灯”屏幕显示光照强度他把ST7735S的VCC接到台灯LED驱动的5V上结果一开灯屏幕就重启。原因LED驱动芯片如PT4115开关时产生高压尖峰通过VCC耦合到ST7735S触发其内部LDO保护。解决方案VCC必须经AMS1117-3.3二次稳压且输入端加TVS二极管SMAJ3
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。