【stm32L152】段码屏驱动注解、MX_LCD_Init()初始化失败的解决方法

文章目录

  • 断码屏驱动补充
  • MX_LCD_Init()驱动初始化失败

断码屏驱动补充

已经有大神写过较详细的教程:https://blog.csdn.net/CSDN_Gao_16/article/details/115463499,但这篇博文仍然比较抽象,我看了好多遍才看明白-_-||,为了节省和我一样看的云里雾里的小白的宝贵的时间,这里是对原文的一些难以理解地方的解释:

  • DISP_NUM[3] = {2, 5, 7}
    这里应该结合原文使用的函数一起看:
    【stm32L152】段码屏驱动注解、MX_LCD_Init()初始化失败的解决方法_第1张图片
    16相当于基地址,2,5,7就相当于偏移地址,传入参数c就相当于指定了显示的是哪个位置的数字, 四个COM口分四次写入。

    • 当然,看懂这里仍然要先明白显存和seg、com的对应关系,这个看了手册LCD寄存器部分应该就清楚了,配合真值表容易理解
  • 权值
    【stm32L152】段码屏驱动注解、MX_LCD_Init()初始化失败的解决方法_第2张图片
    最容易迷惑人的就是这个,搞得很抽象,其实道理很简单,观察真值表可以发现每位数字都是都两个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,则尝试设置内部电源:【stm32L152】段码屏驱动注解、MX_LCD_Init()初始化失败的解决方法_第3张图片
    • 我没用内部电源测试,只是在参考手册上看到这个,有兴趣的可以试试:
      在这里插入图片描述
  • 另外,LCD模块是可以在停机模式运行的:
    从时钟可以看到和RTC共用时钟源:
    【stm32L152】段码屏驱动注解、MX_LCD_Init()初始化失败的解决方法_第4张图片
    规格书也提到可以在部分低功耗场景下使用:
    在这里插入图片描述

你可能感兴趣的:(单片机,STM32L152,段码屏,初始化失败,低功耗)