简介:这份PDF资料聚焦Sitronix(矽创电子)推出的ST7305与ST7306超低功耗显示屏驱动IC,面向电子价签、可穿戴设备、物联网终端等低功耗显示方案的硬件工程师与产品设计者。内容系统梳理了两款芯片的版本定位与分辨率差异:ST7306为主力版本,支持单色720×480、4色360×480、8色240×480及64色240×240;ST7305为入门版本,提供单色408×408与4色204×408。资料重点讲解其ULP a-TFT驱动方法,将传统1/60s驱动时间延长至1Hz模式,实现1Hz On+Off超低功耗与“始终显示”效果,并给出2.13英寸电子价签模块约6.5μA的实测功耗,以及CR2450纽扣电池约8.32年寿命的推算过程。同时涵盖反射式与透射反射式面板适配、-30至85度宽温工作范围及多类IoT应用场景。资源为1个PDF文件,压缩包约533KB,已有890人学习,适合快速掌握低功耗反射式LCD驱动选型与功耗评估要点。
1. ST7305 与 ST7306:一块让墨水屏“动起来”的驱动芯片到底强在哪
如果你最近在找小尺寸反射式显示方案,大概率会刷到 ST7305 和 ST7306 这两个型号。它们不是屏幕本身,而是贴在柔性基板上的显示驱动 IC,专门伺候电子纸、段码式反射屏和低功耗穿戴设备。我第一次接触是因为一个模拟项目要做 1.5 英寸左右的单色反射屏,要求刷新时不能闪、待机时不能费电,翻了一圈选型表,最后落在 ST7305 上。它的核心价值就一句话:把电子纸那种“翻页慢、残影重”的刻板印象,用局部刷新和低功耗时序硬生生掰过来。ST7306 则是同系列里更偏向高分辨率、多灰阶场景的版本,引脚和寄存器结构有差异,但设计思路一脉相承。适合谁看?做穿戴、电子价签、工业仪表、低功耗手持设备的嵌入式工程师,以及被墨水屏刷新率折磨过的驱动开发者。
2. 从数据手册到点亮第一帧:ST7305/7306 的硬件链路怎么搭
2.1 先分清 ST7305 和 ST7306 的引脚与供电差异
很多人拿到型号直接抄参考原理图,结果 ST7306 的升压电路参数和 ST7305 不一样,屏要么不亮,要么对比度惨白。先看关键差异:
| 项目 | ST7305 | ST7306 |
|---|---|---|
| 最大分辨率 | 支持到 240x320 左右 | 更高,适合 300+ 级别 |
| 灰阶 | 单色/少量灰阶 | 多灰阶支持更完整 |
| 电荷泵 | 内置,外围电容较少 | 内置,但升压电容容值要求更严 |
| 接口 | SPI 为主 | SPI 为主,部分配置支持并行 |
| 局部刷新 | 支持 | 支持,窗口粒度更细 |
供电上,ST7305 通常只需要 3.3V 逻辑电和一路升压输出给面板,ST7306 在多灰阶模式下对 VGH/VGL 的纹波更敏感。我一般会在升压输出后面并一颗 1uF 到 2.2uF 的陶瓷电容,位置尽量靠近面板 FPC 焊盘,否则灰阶跳变时会出现横向条纹。
2.2 最小系统接线:SPI 四线加三路电源
以 ST7305 为例,最小系统只需要这些线:
- SCLK、SDI、CS、DC 四根 SPI 控制线
- RESET 复位脚
- BUSY 状态脚(可轮询可中断)
- VDDIO 3.3V、VCI 3.3V、VPP 升压输出到面板
接线顺序建议先接逻辑地和 VDDIO,再接 VCI,最后接升压相关电容。上电时序如果反了,芯片可能进入未定义状态,BUSY 一直拉高。下面是一段初始化 GPIO 和 SPI 的伪代码,基于常见 MCU 的 HAL 风格:
// ST7305 最小初始化:SPI 模式0,时钟先降到 1MHz 调试 void st7305_hw_init(void) { gpio_init(RESET_PIN, OUTPUT); gpio_init(DC_PIN, OUTPUT); gpio_init(CS_PIN, OUTPUT); gpio_init(BUSY_PIN, INPUT_PULLUP); spi_init(SPI0, 1000000, SPI_MODE0); // 先低速,稳定后再提 gpio_write(CS_PIN, 1); gpio_write(RESET_PIN, 0); delay_ms(10); gpio_write(RESET_PIN, 1); delay_ms(50); // 等内部电荷泵稳定 }逻辑说明:RESET 低电平至少保持 10ms,释放后等 50ms 再发命令,这是为了等内部升压和振荡器起振。参数说明:SPI 模式必须是模式0,ST7305 不支持模式3;时钟先给 1MHz,等点亮后再提到 8MHz 或 10MHz,直接上高频容易在排线较长时丢位。
2.3 初始化命令序列:把面板从“黑匣子”叫醒
ST7305 的初始化不是发一条命令就完事,而是一串带参数的寄存器写入。常见做法是参考厂商提供的初始化码,但一定要自己核对升压设置和面板偏压。下面是一段精简后的命令序列:
// 发送命令和数据的辅助函数 void st7305_cmd(uint8_t cmd) { gpio_write(DC_PIN, 0); gpio_write(CS_PIN, 0); spi_write_byte(cmd); gpio_write(CS_PIN, 1); } void st7305_data(uint8_t data) { gpio_write(DC_PIN, 1); gpio_write(CS_PIN, 0); spi_write_byte(data); gpio_write(CS_PIN, 1); } void st7305_init_sequence(void) { st7305_cmd(0xD6); // 升压使能 st7305_data(0x17); st7305_data(0x02); st7305_cmd(0xD1); // 设置 VGH/VGL 等 st7305_data(0x01); st7305_data(0x02); st7305_data(0x03); st7305_cmd(0xC0); // 面板驱动设置 st7305_data(0x80); st7305_data(0x20); st7305_cmd(0x11); // 退出睡眠 delay_ms(100); st7305_cmd(0x29); // 开启显示 delay_ms(50); }逻辑说明:0xD6 是升压控制,参数里 0x17 和 0x02 分别对应升压时钟和软启动配置,不同面板玻璃的负载不一样,如果升压起不来,优先改这两个值。0xD1 设置的是正负压,写错会导致全屏灰或者全屏黑。0xC0 里的 0x80 和 0x20 是驱动波形相关,灰阶模式下需要额外配置。参数说明:每个面板厂给的初始化码可能不同,但 0xD6、0xD1、0xC0、0x11、0x29 这几条基本绕不开。
2.4 局部刷新窗口设置:让 ST7305 只画你关心的区域
局部刷新是 ST7305 的卖点,但窗口坐标设错会花屏。设置窗口一般分两步:先设 X 起止,再设 Y 起止,然后写 RAM。下面以刷一块 64x32 的区域为例:
void st7305_set_window(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1) { st7305_cmd(0x2A); // 列地址设置 st7305_data(x0 >> 8); st7305_data(x0 & 0xFF); st7305_data(x1 >> 8); st7305_data(x1 & 0xFF); st7305_cmd(0x2B); // 行地址设置 st7305_data(y0 >> 8); st7305_data(y0 & 0xFF); st7305_data(y1 >> 8); st7305_data(y1 & 0xFF); st7305_cmd(0x2C); // 准备写 RAM }逻辑说明:0x2A 和 0x2B 的坐标是包含起止的,x1 和 y1 要写实际结束坐标,不是长度。写 RAM 时数据按行优先填充,每行像素数要和窗口宽度匹配。参数说明:如果面板是 240x320,x 范围 0 到 239,y 范围 0 到 319,超出范围芯片会回绕,表现就是图像错位。
3. 低功耗时序与灰阶调优:ST7306 多灰阶模式下的参数怎么配
3.1 灰阶模式对升压和帧率的要求
ST7306 在多灰阶下,每个像素要分时驱动多次,升压电路负载比单色模式重。如果升压电容不够,灰阶过渡会出现断层。我一般会把升压电容从 1uF 提到 2.2uF,同时把帧率从 50Hz 降到 30Hz 左右,给电荷泵留恢复时间。帧率寄存器通常在 0xB1 或类似位置,具体看手册。
3.2 用 LUT 调灰阶:别直接改对比度寄存器
很多人调灰阶只改对比度,结果暗部全糊。正确做法是改 LUT(查找表),ST7306 支持多组 LUT,对应不同刷新模式。下面是一个 LUT 写入的简化示例:
// 写入一组自定义 LUT,用于 4 灰阶模式 void st7306_write_lut(const uint8_t *lut, uint16_t len) { st7306_cmd(0x20); // LUT 写入命令,具体命令号以手册为准 for (uint16_t i = 0; i < len; i++) { st7306_data(lut[i]); } st7306_cmd(0x22); // 触发 LUT 加载 st7306_data(0x01); }逻辑说明:LUT 数据长度和面板灰阶数相关,4 灰阶通常需要几十字节。写入后必须发触发命令,否则 LUT 不生效。参数说明:LUT 值不要全设成最大,否则残影严重;建议中间灰阶留 10% 到 20% 的余量。
3.3 低功耗待机:把 BUSY 脚用起来
ST7305/7306 在待机时电流可以降到微安级,但前提是正确进入睡眠模式。常见做法是刷完最后一帧后发 0x10 进入睡眠,同时把 SPI 引脚置为低电平或高阻,避免漏电。BUSY 脚在睡眠期间会拉高,可以用外部中断唤醒。注意:唤醒后需要重新发初始化序列,不能直接写 RAM。
4. 避坑与排查:ST7305/7306 调试中最容易翻车的 5 个点
4.1 上电后全屏无反应,BUSY 一直高
现象:发完初始化命令,屏幕不亮,BUSY 脚始终高电平。原因:升压没起来,或者 RESET 时序不对。解决:先用示波器看 VPP 有没有升到面板规格,再检查 RESET 低电平是否保持够 10ms。如果 VPP 正常但 BUSY 仍高,尝试降低 SPI 时钟到 500kHz 重新初始化。
4.2 局部刷新后出现横向条纹
现象:只刷一小块区域,但周围出现细横线。原因:窗口坐标设成了长度,或者 RAM 写入数据量超过窗口大小。解决:确认 x1/y1 是结束坐标,不是宽度;写 RAM 时严格按窗口像素数发数据,多发一个字节就会错位。
4.3 灰阶过渡出现明显断层
现象:ST7306 在 4 灰阶下,浅灰和深灰之间跳变生硬。原因:升压电容不足或 LUT 配置太陡。解决:升压电容换 2.2uF,LUT 中间灰阶值往中间靠,不要从 0 直接跳到最大值。
4.4 睡眠唤醒后花屏
现象:进入睡眠再唤醒,屏幕显示乱码。原因:唤醒后没有重新初始化,或者 RAM 内容丢失。解决:唤醒后完整走一遍初始化序列,再重写整个 RAM,不要只写局部窗口。
4.5 SPI 通信偶发丢数据
现象:长时间运行后偶尔出现一帧错位。原因:SPI 时钟太快,排线太长,或者 CS 建立时间不够。解决:SPI 降到 4MHz 以下,CS 拉低后加 1us 延时再发时钟,排线尽量短并加地线隔离。
5. 进阶技巧:用 ST7305 做局部刷新动画的帧同步方法
如果你想让 ST7305 跑简单动画,比如指针转动或进度条,直接连续发局部刷新命令会撕裂。我一般用 BUSY 脚做帧同步:每次局部刷新前先等 BUSY 变低,再发窗口和 RAM,刷完再等 BUSY 变低才发下一帧。这样虽然帧率不高,但画面稳定。下面是一个帧同步的伪代码:
void st7305_refresh_region_sync(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, const uint8_t *buf) { while (gpio_read(BUSY_PIN) == 1) { // 等待上一次刷新完成 } st7305_set_window(x0, y0, x1, y1); uint16_t len = ((x1 - x0 + 1) * (y1 - y0 + 1)) / 8; for (uint16_t i = 0; i < len; i++) { st7305_data(buf[i]); } st7305_cmd(0x29); // 触发刷新 }逻辑说明:BUSY 为高表示芯片忙,等它变低再操作。窗口设置后连续写 RAM,最后发 0x29 触发。参数说明:buf 长度按窗口像素数除以 8 计算,单色模式下每个字节 8 个像素。如果做动画,建议把刷新区域控制在 64x64 以内,否则 BUSY 等待时间会明显拉长。
另外,ST7306 在多灰阶下做动画更吃力,因为每帧数据量大。我的习惯是动画只用单色模式,静态图片才切灰阶。还有一点血泪经验:调试阶段一定把初始化命令和 LUT 数据存成数组,方便对比不同面板的差异,别每次手敲。最后,如果你在选型阶段纠结 ST7305 还是 ST7306,记住一条:单色低功耗选 7305,多灰阶高分辨率选 7306,别指望 7305 硬跑灰阶,残影会让你后悔。希望帮到你。
本文还有配套的精品资源,点击获取