TFT-LCD移植记录

1、TFT-LCD驱动方式及原理

关于屏幕资料,这里有个比较好的网站方便我们进行查阅 LCD wiki

本次测试,我用了两种屏幕,效果都是正常的

第一种是这种的电容屏
在这里插入图片描述
第二种是正点原子的这种电阻屏
在这里插入图片描述
接口引脚图
在这里插入图片描述
关于引脚资源的描述

  • CS: TFTLCD 片选信号。
  • WR:向 TFTLCD 写入数据。
  • RD:从 TFTLCD 读取数据。
  • D[15: 0]: 16 位双向数据线。
  • RST:硬复位 TFTLCD。
  • RS:命令/数据标志( 0,读写命令; 1,读写数据)。

关于驱动:这里可以看到它是有16个数据引脚的的,但是可以选择八位或者16两种方式进行驱动,这里就选择16位吧,引脚资源也不是很缺,16位理论上来说也是8位速度的两倍,一般对数据位进行选择是通过硬件来进行的,如下图所示:

3.5寸电容屏选择

在这里插入图片描述
正点原子精英屏幕选择
在这里插入图片描述

另外就是 TFTLCD模块的 RST 信号线是直接接到 STM32F1 的复位脚上,并不由软件控制,上电的过程就会复位,这样节省了一个引脚

下面是关于驱动芯片,好像类似的芯片比较多,常见的例如

ILI9341/ILI9325/RM68042/RM68021/ILI9320/ILI9328/LGDP4531/LGDP4535/SPFD5408/SSD1289/1505/B505/C505/NT35310/NT35510

这里也就不翻手册了,我上面提供的网站应该都能找到,本篇文章仅记录移植过程

一般对屏幕进行操作的流程如下:

  • 屏幕复位
  • 设置坐标
  • 写/读指令
  • 写/读颜色左边
  • LCD显示

这里对屏幕的驱动采用FSMC的方式进行驱动

STM32大容量,且引脚数目在 100 脚及以上的 STM32F103 芯片都带有 FSMC 接口,FSMC,即灵活的静态存储控制器,能够与同步或异步存储器和 16 位 PC 存储器卡连接,STM32F1 的 FSMC 接口支持包括 SRAM、 NAND FLASH、 NOR FLASH 和 PSRAM 等存储器。

在这里是将TFT-LCD当成SRAM来使用,关于原因,正点原子教程给出的解释如下:
在这里插入图片描述

2、配置TFT-LCD驱动

引脚说明

在这里插入图片描述
在这里插入图片描述

下面在CUBEMX中进行配置

选择FSMC
在这里插入图片描述
关于上面参数的说明:

最简单的就是看正点原子的教程手册,都讲的很清楚明白了
在这里插入图片描述
这里做点补充解释(其实也是抄的手册)

  • RS,RS信号决定是传输数据还是命令,把 RS 接在 A0 上面,那么当 FSMC 控制器写地址 0 的时候,会使得 A0 变为 0,对 TFTLCD 来说,就是写命令。而 FSMC 写地址 1 的时候, A0 将会变为 1,对 TFTLCD 来说,就是写数据了。这样,就把数据和命令区分开了,他们其实就是对应 SRAM 操作的两个连续地址。当然 RS 也可以接在其他地址线上,这里开发板是把 RS 连接在 A10 上。
  • 储存块,STM32F1的 FSMC 将外部存储器划分为固定大小为 256M 字节的四个存储块,每个储存块有四个区,就是选项里面的NE1/2/3/4,如下图所示:
    在这里插入图片描述在这里插入图片描述

配置好只有可以看到已经自动生成我们需要的引脚了
在这里插入图片描述
然后根据原理图这里还需要配置一个引脚来做背光
在这里插入图片描述
之后生成代码即可!!!

3、移植驱动函数

之后就是移植了(简单说就是抄)

全文复制正点原子的内容
在这里插入图片描述
FSMC部分cubemx已经帮我们配置好了,不需要直接注释掉
在这里插入图片描述
背光引脚这里HAL库没有这样位操作的东西,直接用引脚操作函数替换
在这里插入图片描述
之后就是延时函数,用我们自己的毫秒,us延时函数替换即可,可以参考我这篇文章 stm32配置总结(一)使用Systick嘀嗒计数器

然后就是一些u8,u16类似这样的宏,进行全局替换即可

之后就可以在主函数中加入替换代码,如下所示

在这里插入图片描述
源代码如下:

		switch(x)
		{
    
    
			case 0:LCD_Clear(WHITE);break;
			case 1:LCD_Clear(BLACK);break;
			case 2:LCD_Clear(BLUE);break;
			case 3:LCD_Clear(RED);break;
			case 4:LCD_Clear(MAGENTA);break;
			case 5:LCD_Clear(GREEN);break;
			case 6:LCD_Clear(CYAN);break;
			case 7:LCD_Clear(YELLOW);break;
			case 8:LCD_Clear(BRRED);break;
			case 9:LCD_Clear(GRAY);break;
			case 10:LCD_Clear(LGRAY);break;
			case 11:LCD_Clear(BROWN);break;
		}
		POINT_COLOR=RED;
		LCD_ShowString(30,40,200,16,16,"liuxing STM32F1 ^_^");
		LCD_ShowString(30,90,200,16,16,"TFTLCD TEST");
		LCD_ShowString(30,110,200,16,16,"ATOM@ALIENTEK");
		LCD_ShowString(30,130,200,16,16,lcd_id);		//显示LCD ID
		LCD_ShowString(30,150,200,12,12,"2015/1/14");
	    x++;
		if(x==12)x=0;
		HAL_Delay(1000);

将程序下载到开发板,效果如下
在这里插入图片描述
正点原子精英开发板效果
在这里插入图片描述
可以看到移植还是非常成功的

4、移植触摸驱动

还是跟上面的一样,把文件复制过来,这里我只做了合适我屏幕的部分驱动,没有全部移植
在这里插入图片描述
有些屏幕读取芯片用的是IIC的接口,其实也就很简单的,关于IIC的移植,可以看我这篇文章 stm32配置总结-iic的使用

之后再把测试函数放过来
在这里插入图片描述
将程序下载到开发板,效果如下所示:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_51220742/article/details/123584828
今日推荐