[其他ST产品] STM32学习笔记---TFT-LCD

[复制链接]
3217|84
 楼主| hehhehee 发表于 2022-8-24 22:42 | 显示全部楼层
注:液晶屏内部包含SSD1963控制器,该控制器使用 8080 接口与单片机通讯
 楼主| hehhehee 发表于 2022-8-24 22:43 | 显示全部楼层
2、STM32与LCD的电气连接
80079630638eca30d7.png
 楼主| hehhehee 发表于 2022-8-24 22:44 | 显示全部楼层
2.1、8080时序-写数据/命令
215086306393d4970a.png
 楼主| hehhehee 发表于 2022-8-24 22:45 | 显示全部楼层
注:STM32通过8080接口与SSD1963 芯片进行通讯,实现对液晶屏的控制。通讯的内容主要包括命令和显存数据,显存数据即各个像素点的 RGB565 内容;命令是指对 SSD1963的控制指令,MCU 可通过8080接口发送命令编码控制 SSD1963的工作方式,例如复位指令、设置光标指令、睡眠。
 楼主| hehhehee 发表于 2022-8-24 22:46 | 显示全部楼层
用GPIO管脚模拟8080时序

  1. void LCD_WR_Byte(uint8_t dat,  uint8_t cmd)
  2. {
  3.    LCD_Data_Out(dat);        //放入数据       
  4.   if(cmd)                       
  5.              LCD_DC_Set();              //传命令            
  6.   else                       
  7.              LCD_DC_Clr();            //传数据

  8.   LCD_CS_Clr();             //拉低片选
  9.   LCD_WR_Clr();           //写使能
  10.   LCD_WR_Set();    //WR产生上升沿,数据锁存               
  11.   LCD_CS_Set();           //取消片选       
  12.   LCD_DC_Set();          //复位DC信号线   
  13. }
 楼主| hehhehee 发表于 2022-8-24 22:47 | 显示全部楼层
2.2、FMSC-模拟8080时序

65344630639ee15c93.png
Tpwcsl = ADDSET + DATAST +1 > 30      ~~~~      建议适当取大一点点
TCS = ADDSET > 2 ns                               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~                               ADDSET = 1
TPWLW = DATAST +1 > 12ns                     ~~~~~~~~~~~~~~~~~~~                     DATAST = 3
 楼主| hehhehee 发表于 2022-8-24 22:48 | 显示全部楼层
Tpwcsl = ADDSET + DATAST +1 > 30      ~~~~      建议适当取大一点点
TCS = ADDSET > 2 ns                               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~                               ADDSET = 1
TPWLW = DATAST +1 > 12ns                     ~~~~~~~~~~~~~~~~~~~                     DATAST = 3
3183163063a2d907fb.png
 楼主| hehhehee 发表于 2022-8-24 22:48 | 显示全部楼层
对于FSMC和8080接口,前四种信号线都是完全一样的,仅仅是FSMC的地址信号线A[25:0]与8080的数据/命令选择线D/C#有区别。
        ~~~~~~~        为了模拟出8080时序,我们可以把FSMC的A0地址线与SSD1963芯片8080接口的D/C#信号线连接,那么当A0为高电平时(即D/C#为高电平),数据线D[15:0]的信号会被SSD1963理解为数值,若A0为低电平时(即D/C#为低电平),传输的信号则会被理解为命令。
 楼主| hehhehee 发表于 2022-8-24 22:50 | 显示全部楼层
2.3、如何控制A0(即控制DC线)

4995963063a96bd502.png
注:LCD控制器的片选连入到FSMC的NE4管脚。所以当发出0x6C00 0000-0x6FFF FFFF之间的地址时NE4输出低电平,选中LCD控制器
 楼主| hehhehee 发表于 2022-8-24 22:51 | 显示全部楼层
2.4、如何控制A0(即控制DC线)

        ~~~~~~~        在实际控制时,以上地址计算方式还不完整,根据《STM32 参考手册》对 FSMC 访问NOR FLASH 的说明STM32 内部访问地址时使用的是内部 HADDR 总线, HADDR[25:0] 包含外部存储器地址。由于 HADDR 为字节地址,而存储器按字寻址,所以根据存储器数据宽度不同,实际向存储器发送的地址也将有所不同,如下表所示。
 楼主| hehhehee 发表于 2022-8-24 22:51 | 显示全部楼层
8420663063ae02811c.png
注:实际控制A0时:
把前面的地址<<1就可以了
0x6C000000 低电平表示命令
0x6C000002 高电平表示数据
 楼主| hehhehee 发表于 2022-8-24 22:52 | 显示全部楼层
四、LCD测试程序讲解
1、CubeMx配置
1.1、时钟配置

1635063063b1db98a3.png

4563963063b23940e8.png
 楼主| hehhehee 发表于 2022-8-24 22:55 | 显示全部楼层
1.2、FSMC管脚配置
849863063bdca542e.png
 楼主| hehhehee 发表于 2022-8-24 22:58 | 显示全部楼层
 楼主| hehhehee 发表于 2022-8-24 23:00 | 显示全部楼层
2、代码详解
2.1、LCD驱动文件

以地址区分数据还是指令
571263063d2491368.png
 楼主| hehhehee 发表于 2022-8-24 23:01 | 显示全部楼层
2.2、初始化函数
1969363063d57a5b21.png
2522263063d5f572ec.png
 楼主| hehhehee 发表于 2022-8-24 23:02 | 显示全部楼层
2.3、清屏函数
8144663063d70e25a6.png
2701863063d7b32481.png
3130863063d8740b86.png
 楼主| hehhehee 发表于 2022-8-24 23:05 | 显示全部楼层
2.4、填充函数
4821563063e280a249.png
其余画矩形画圆都可以查看LCD.c文件。
 楼主| hehhehee 发表于 2022-8-24 23:05 | 显示全部楼层
3、LCD显示图片和中英文字符
3.1、将图片转换成图片数据

使用软件Image2Lcd软件
 楼主| hehhehee 发表于 2022-8-24 23:07 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部