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的使用
之后再把测试函数放过来
将程序下载到开发板,效果如下所示:
标签:case,引脚,Clear,16,break,LCD,TFT,移植 来源: https://blog.csdn.net/m0_51220742/article/details/123584828