STM32 LCD显示不正常

请问一下STM32F407在用FSMC液晶显示的时候,程序下载后LCD不显示,但是在调试模式的时候可以正常显示,LCD为ILI9486。

这个问题可能由以下几种原因造成:

  1. 时序不正确

在使用FSMC控制LCD时,因为时序关系比较复杂,可能由于时序设置不正确导致数据无法正常显示在屏幕上。建议根据LCD datasheet中提供的时序参数来设置FSMC时序参数,确保FSMC在读写LCD时序时与LCD保持一致。

  1. AC/DC接口电容未正确配置导致背光未亮

ILI9486 LCD有两个电源引脚,其中一个是电源引脚,另一个是控制显示器背光的引脚。可能由于AC/DC接口电容未正确配置或者电源电压设置不正确导致背光未亮。建议检查AC/DC接口电容是否正确配置、电源电压是否稳定。

  1. 控制信号连接问题

因为LCD连接较为复杂,可能由于某个引脚连接不正确导致FSMC无法与LCD进行正常的数据传输。建议检查各个控制信号与对应引脚是否正确连接。

  1. 驱动程序问题

还有可能是驱动程序存在问题导致LCD无法正常显示。建议检查驱动程序是否正确编写,并且在下载程序后检查芯片内存与实际代码是否一致。

综上所述,需要结合芯片手册和LCD datasheet中提供的参数以及实际情况来进行排查。可以逐步排除各种可能性,最终找到问题所在并进行相应的修复。

  • 建议你看下这篇博客👉 :STM32 - 使用FSMC控制LCD
  • 除此之外, 这篇博客: STM32之FSMC驱动LCD难点理解中的 STM32之FSMC驱动LCD难点理解 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 根据外设存储器的位宽分为8Bit和16Bit驱动
    STM32内部存储单位为一个字节,也就是一个地址存储一个字节大小的数据,当外部存储器的位宽为8位时,写入一个数据需要一个字节即地址加1,当外部存储器的位宽为16位时,写入一个数据需要两个字节即地址加2,如下图所示:
    外设存储器位宽8位:写入0x11 和 0x22

    地址内存
    0x6000 00000x11
    0x6000 00010x22

    外设存储器位宽16位:写入0x1122 和 0x3344

    地址内存
    0x6000 00000x11
    0x6000 00010x22
    0x6000 00020x33
    0x6000 00030x44
    写16位数据地址变化HADDR[25:0]
    0x000000 0000
    0x020000 0010
    0x040000 0100
    0x060000 0110

    由于内存地址映射都是偶地址开始,当外设存储器的位宽为16位时,每次写数据时地址加2,相当于所有的地址为2的倍数,即写16位数据时地址位右移1位。FSMC将使用内部的HADDR[25:1]地址来作为对外部存储器的寻址地址FSMC_A[24:0]。
    在这里插入图片描述
    当FSMC模拟80并口时序驱动LCD外设时,以A6为例,作为LCD_RS信号控制线,A6输出0写命令,A6输出1写数据。当外设是8位位宽时,FSMC以HADDR[25:0] (映射FSMC_A[25:0])对外寻址,只要HADDR[25:0]的Bit6为0写命令,为1写数据。当外设是16位位宽时,FSMC以HADDR[25:1](映射FSMC_A[24:0])对外寻址,相当于整个地址右移一位,原来的Bit6输出实则是FSMC_A5输出,要让A6输出需要设置Bit7输出。如下所示:
    外设为8位:Bit6->0100 0000->0x40
    写命令->A6输出0 地址0x6000 0000用HADDR[25:0]表示,FSMC_A6为0
    写数据->A6输出1 地址(0x6000 0000|0x40)用HADDR[25:0]表示,FSMC_A6为1
    外设为16位:Bit6->0100 0000->0x40 Bit7->1000 0000->0x80
    写命令->A6输出0 地址0x6000 0000用HADDR[25:1]表示即右移1位写入FSMC_A[24:0],FSMC_A6仍为0
    写数据->A6输出1 地址(0x6000 0000|0x40)用HADDR[25:1]表示即右移1位写入FSMC_A[24:0],FSMC_A6变为0, FSMC_A5变为1,要使FSMC_A6输出1,地址需或上Bit7即地址(0x6000 0000|0x80)

    LCD存储地址表示
    LCD存储地址表示方式有两种,宏定义表示和结构体表示,结构体表示跟结构体成员所占空间大小有关。
    FSMC_A6为LCD_RS信号控制线,控制命令和数据的读写,2^6=0x40,2^7=0x80,
    在这里插入图片描述

  • 您还可以看一下 朱有鹏老师的STM32的中断体系和FSMC控制LCD-第3季第7部分视频课程课程中的 3.7.8.什么是FSMC小节, 巩固相关知识点