前前后后,经过一年多的时间,终于点亮了这块三色墨水屏,其中踩过不少坑,有硬件的原因,也有软件的原因,现拿出来分享一下,让“小白”能少走弯路。
1. 堆值设置错误:
当时情况是:移植完微雪的例程,编译通过,成功下载到开发板,可墨水屏没有任何反应,一年前的情况也是这样。
仔细看例程,发现其实是有调试的,这才想到打开串口助手。
打开串口助手,这才发现是内存不足导致,图像没法缓存。
增加动态内存的大小,可以在STM32CubeMX中Project Manager里面设置。
也可以在启动文件startup_stm32xxxxxx.s中直接修改。
改到多大才合适呢?一开始用的是笨方法,一点一点的往上增加。其实,程序中给出了图像缓存大小的计算公式(后来才发现),只要大于图像缓存的大小就可以。
UBYTE *BlackImage, *RYImage;
UWORD Imagesize = ((EPD_2IN13B_V4_WIDTH % 8 == 0)? (EPD_2IN13B_V4_WIDTH / 8 ): (EPD_2IN13B_V4_WIDTH / 8 + 1)) * EPD_2IN13B_V4_HEIGHT;
2. 微雪官方例程的BUG?
调整合适的堆值大小,下载后调试,串口助手显示:成功加载图像,最后关闭电源,进入睡眠模式,可墨水屏还是没有任何反应。当时一下就懵了。于是尝试更换其他尺寸、型号的例程,经过几天的瞎折腾,通过对比发现:打开显示的函数(TurnOnDisplay)少两行。
查询数据手册得知,第一行发送命令0X22,即 “Display Update Control 2”(显示更新控制 2),用于设置显示更新序列的选项。
第二行发送数据0XF7,是与 “Display Update Control 2” 命令相关的参数,启用了时钟信号、加载了温度值、选择了显示模式 1 等。
3. 芯片烧坏:
在反复尝试的过程中,终于有一块墨水屏被我刷爆了。
分析原因可能有两个:
(1).墨水屏的转接板有电阻选择,对应不同的大小尺寸、IC的墨水屏,结果没注意,导致电压过高,芯片烧坏。
(2).不同的墨水屏功能各不相同,有局刷、全刷、快刷、有的还不同的灰阶,它所对应的芯片内部的电压各不相同(由芯片各自的指令调控),我一股脑的各种尝试,也有可能导致电压过高而烧毁。
总之,自己的知识储备还是不足,要学习的东西还很多。
全部评论