一、设备和环境
- 驱动IC ST75256
- 点阵LCD 黑白屏幕
二、我的需求
提供一个可调屏幕对比度的控制菜单给用户,用户可以微调屏幕对比度。为了屏幕效果可控,提供了7个特定微调对比度参数。设置如下所示:
三、我遇到的问题
通过菜单调整对比度的时候,屏幕对比度变化符合预期。但是会随机出现屏幕突然白屏的问题。后面再往屏幕写数据,也不能恢复。
四、问题解决
结论
经过排查,发现原因是:通过spi 写屏幕的时候,数据有冲突。
内部处理方式
刷新屏幕显示数据的时候,是通过dma + spi
的方式;写lcd控制命令和参数的时候,直接操作spi
发送。
原因分析
用户通过菜单修改对比度的时候,触发了更新屏幕显示内容的事件,单片机将显示缓冲区的内容通过 dma
发送到ST75256 , 由于dma 通信不用占用cpu的时间,在 dma 将数据发送到ST75256 的过程中,cpu 将控制新的对比度参数也写入ST75256 ,造成数据冲突。
问题解决
添加判断逻辑,在dma 传输过程中,不再传输控制命令和参数。