EPD_2IN7_V2_Clear() 和 Paint_Clear(WHITE) 的区别
在微雪(Waveshare)墨水屏驱动中,EPD_2IN7_V2_Clear()
和 Paint_Clear(WHITE)
虽然都能实现清屏效果,但二者的底层操作和适用场景有本质区别。以下是详细对比:
1. 功能区别
函数 | EPD_2IN7_V2_Clear() | Paint_Clear(WHITE) |
---|---|---|
所属模块 | 硬件驱动层(直接操作屏幕) | 软件绘图层(操作内存中的图像缓存) |
作用对象 | 物理屏幕 | 绑定的图像缓存(如 BlackImage ) |
清屏原理 | 发送硬件指令强制全刷为白色 | 将内存中的图像缓存全部填充为白色数据 |
是否需要显示函数 | 否(立即生效) | 是(需调用 EPD_Display() 才能更新到屏幕) |
刷新方式 | 全刷(耗时约2秒) | 无刷新(仅修改内存数据) |
功耗 | 高(触发高压驱动) | 低(仅操作内存) |
2. 使用场景对比
(1) EPD_2IN7_V2_Clear()
适用场景
- 初始化屏幕:
首次上电或从睡眠模式唤醒时,强制清除残影。EPD_2IN7_V2_Init(); EPD_2IN7_V2_Clear(); // 硬件级清屏
- 恢复显示异常:
当屏幕因残影或干扰显示异常时,直接复位屏幕状态。
(2) Paint_Clear(WHITE)
适用场景
- 软件层清空画布:
在内存中准备新图像前,清除旧内容(不立即影响屏幕)。Paint_SelectImage(BlackImage); Paint_Clear(WHITE); // 内存缓存清白 Paint_DrawString_EN(10, 10, "Hello", &Font16, BLACK, WHITE); EPD_Display(BlackImage); // 更新到屏幕
- 局部刷新前的准备:
配合局刷时,仅清除缓存中的特定区域。
3. 关键差异示例
(1) 错误用法导致残影
// 错误:仅清缓存未刷屏,屏幕仍显示旧内容
Paint_Clear(WHITE);
// 忘记调用 EPD_Display(BlackImage);// 正确:硬件清屏+缓存清屏双保险
EPD_2IN7_V2_Clear(); // 硬件全刷白
Paint_Clear(WHITE); // 内存缓存清白
EPD_Display(BlackImage); // 同步到屏幕(冗余但安全)
(2) 性能对比
操作流程 | 耗时 | 残影风险 |
---|---|---|
EPD_2IN7_V2_Clear() | 2s | 无 |
Paint_Clear() + EPD_Display() | 2s | 无 |
仅 Paint_Clear() | 0s | 有 |
4. 何时需要同时使用?
在以下场景建议 组合调用 以兼顾可靠性和显示一致性:
// 场景:长期休眠后恢复显示
void WakeUpFromSleep() {EPD_2IN7_V2_Init(); // 初始化硬件EPD_2IN7_V2_Clear(); // 强制硬件清屏(防残影)Paint_Clear(WHITE); // 同步清空缓存// 绘制新内容...EPD_Display(BlackImage); // 更新屏幕
}
5. 总结
选择依据 | EPD_2IN7_V2_Clear() | Paint_Clear(WHITE) |
---|---|---|
需立即物理清屏 | ✓(如初始化、异常恢复) | × |
仅清内存缓存 | × | ✓(如局部刷新前的准备) |
低功耗要求 | ×(高压刷新耗电) | ✓(无硬件操作) |
代码执行速度 | 慢(阻塞式全刷) | 快(内存操作) |
最佳实践:
- 初始化或异常处理时优先用
EPD_2IN7_V2_Clear()
。 - 动态更新内容时用
Paint_Clear()
+EPD_Display()
组合。 - 避免冗余调用以节省时间和功耗。