文章目录
- 断码屏驱动补充
- MX_LCD_Init()驱动初始化失败
断码屏驱动补充
已经有大神写过较详细的教程:https://blog.csdn.net/CSDN_Gao_16/article/details/115463499,但这篇博文仍然比较抽象,我看了好多遍才看明白-_-||,为了节省和我一样看的云里雾里的小白的宝贵的时间,这里是对原文的一些难以理解地方的解释:
-
DISP_NUM[3] = {2, 5, 7}
这里应该结合原文使用的函数一起看:
16相当于基地址
,2,5,7就相当于偏移地址
,传入参数c
就相当于指定了显示的是哪个位置的数字, 四个COM口分四次写入。- 当然,看懂这里仍然要先明白显存和seg、com的对应关系,这个看了手册LCD寄存器部分应该就清楚了,配合真值表容易理解
-
权值
最容易迷惑人的就是这个,搞得很抽象,其实道理很简单,观察真值表可以发现每位数字都是都两个SEG组成,且都是相邻的:
因为上面有左移(基地址+偏移地址),已经可以偏移到了对应的7,10,12的SEG上面了,接下来就是写寄存器,也就是平时的先&0再|1,所以四个COM端掩码部分要清空的就分别是(第0、1位)、(第0、1位)、(第0、1位)、(第1位),而第0位对应二进制是1,第1位对应二进制是2,所以这个权值(也就是对应要操作的显存位置)就是3、3、3、2,这里会把对应的显存清掉,写的显存内容就是DISP_NUM_TAB[10][4]中的对应值,比如数字0,DISP_NUM_TAB[0]是{3,2,3,2}。- 这里也还是需要知道
HAL_LCD_Write()
中的形参是什么意思才行,需要关注寄存器号、掩码、数据。掩码就是为0的部分会清掉,数据就是再或运算写上去,就完成了显存的操作,然后调用HAL_LCD_UpdateDisplayRequest()
就会刷新上去
- 这里也还是需要知道
MX_LCD_Init()驱动初始化失败
- 另外,关于LCD初始化失败,可能是配置或电路原因,如果 V l c d V_{lcd} Vlcd连接了 V c c V_{cc} Vcc, 使用外部电源(External),如果 V l c d V_{lcd} Vlcd通过电容连接到 V s s V_{ss} Vss,则尝试设置内部电源:
- 我没用内部电源测试,只是在参考手册上看到这个,有兴趣的可以试试:
- 我没用内部电源测试,只是在参考手册上看到这个,有兴趣的可以试试:
- 另外,LCD模块是可以在停机模式运行的:
从时钟可以看到和RTC共用时钟源:
规格书也提到可以在部分低功耗场景下使用: