目录
触摸屏
电阻式触摸屏利用压力感应进行触点检测控制,需要直接应力接触,通过检测电阻来定位触摸位置。
电阻式:定位准确,单点触摸
四线电阻屏
有x极、y极,根据均匀分布的电场,触摸然后确定某点电压。
开始不知道斜率,需要校准,确定电压和坐标之间的函数关系。
校准参数保存在EEPROM(断电可保存),
每次重新上电系统初始化后读出来这个参数即可。
一般用三点触摸或者四点触摸检测。
电阻屏感应触摸后输出两个方向的电压,根据电压值来判断触摸点。所以还需要一个特定的触摸屏AD转换芯片来转换。
LCD
TFTLCD
TFT-LCD 即薄膜晶体管液晶显示器。
其英文全称为:Thin Film Transistor-Liquid Crystal Display。
TFT-LCD 与无源 TN-LCD、STN-LCD 的简单矩阵不同,它在液晶显示屏的每一个象素上都设置有一个薄膜晶体管(TFT),可有效地克服非选通时的串扰,使显示液晶屏的静态特性与扫描线数无关,因此大大提高了图像质量。
ALINETEK 2.8寸 TFTLCD
特点
- 240*320分辨率
- 16位真彩显示(65536色)
- 自带电阻触摸屏
- 自带背光电路
模块是3.3V供电的
这个是对外引出的接口
接口说明
16位80并口
- LCD_CS :LCD片选信号
- LCD_WR :LCD写读号
- LCD_RD :LCD读信号
- DB[17:1] : 16位双向数据线
- LCD_RST :硬复位LCD信号
- LCD_RS : 命令/数据标志 (0命令 1数据)
- BL_CTR :背光控制信号
- T_MISO/T_MOSI/T_CS/T_CLK,触摸屏接口信号
上面用来点亮LCD,下面是触摸屏相关的接口。
ALINETEK 2.8寸 TFTLCD 16位80并口驱动简介
模块的8080并口读/写的过程为:
先根据要写入/读取的数据的类型,设置RS为高(数据)/低(命令),然后拉低片选,选中ILI9341,接着我们根据是读数据还是要写数据置RD/WR为低,
然后
- 读数据:在RD的上升沿,读取数据线上的数据
- 写数据:在WR的上升沿,使数据写入到ILI9341里
ILI9341驱动时序
读ID低电平脉宽trdl 45纳秒
读ID高电平脉宽trdh 90纳秒
ID指的是LCD的ID号
读ID的时序最小是45和90纳秒
读FM低电平脉宽trdlfm 355纳秒
读FM高电平脉宽trdhfm 90纳秒
FM指帧缓存,即GRAM。
读FM的时候速度比较慢。
上面的读时序配置FSMC就行了
写LCD的速度比读快很多
写控制低电平脉宽(twrl) 15纳秒
写控制高电平脉宽(twrh) 15纳秒
TFTLCD驱动流程
LCD_RST和MCU的复位连在一起,节省了一个IO。
驱动之前必须硬复位。
初始化序列厂家提供。
RGB565
模块对外接口采用16位并口,颜色深度为16位,格式为RGB565
5位红 6位绿 5位蓝 这样的格式
ILI9341指令格式说明
指令都是8位的,高8位无效,且参数除了读写GRAM的时候是16位,其他操作参数都是8位的。
0XD3
读ID4的指令,用于读取LCD控制器的ID,(ID:LCD模块控制器的型号的具体体现,比如9341读出来就是9341)
同一个代码,可以根据ID不同,执行不同的LCD驱动初始化,以兼容不同的LCD屏幕。
0X36
该指令为存储访问控制指令,可以控制ILI9341存储器的读写方向,简单的说就是在连续读写GRAM的时候。可以控制GRAM指针的增长方向,从而控制显示方式(读GRAM也一样)。
就是用处就是先确定0,0坐标,然后就写GRAM就行了,不用再不停地设置坐标,就是写的时候一行一行从左到右从上到下写(控制位000的情况)。
还可以从左到右从下到上……
可以加速显示。
0X2A
该指令是列地址设置指令,在从左到右,从上到下的扫描方式下,该指令用于设置横坐标
带有SC和ES坐标值,列地址的起始值和结束值。SC必须小于等于EC。
0<=SC/EC<=239
如果EC没有变化,只要设置SC就行。
0X2B
该指令是页地址设置指令,从左到右从上到下的扫描方式下,该指令用于设置纵坐标。
0<=SP/EP<=319
0X2C
该指令是写GRAM指令,在发送该指令后,就可以往LCD的GRAM里面写入颜色数据了,该指令支持连续写(地址自动递增)
0X2E
该指令是读GRAM指令,用于读取ILI9341的显存(GRAM),同0X2C指令,该指令支持连续读(地址自动递增)
FSMC
FSMC,即灵活的静态存储控制器,能够与同步或异步存储器和16位PC存储器卡连接,STM32的FSMC接口支持包括SRAM、NAND FLASH、NOR FLASH和PSRAM等存储器。
实验里是将LCD当作外部SRAM的。
外部SRAM的控制一般有:
地址线A0~A25
数据线D0~D15
写信号WE 即WR
读信号OE 即RD
片选信号CS
如果SRAM支持字节控制,还有UB/LB信号
TFTLCD的信号有RS、D0~D15、WR、RD、CS、RST和BL等。
其中真正在操作LCD用到的只有RS、D0~D15、WR、RD和CS。
其操作时序和SRAM的控制完全类似,
唯一不同就是TFTLCD有RS信号,但是没有地址信号。
TFTLCD通过RS信号来决定传送的是数据还是命令,本质就是当作地址信号,这样就可以当作SRAM。
把数据和命令分开,其实就是对应SRAM操作的两个连续地址。
可以把TFTLCD当作一个SRAM来用,只不过这个SRAM有2个地址,这也是FSMC可以驱动LCD的原理。
NOR PSRAM外设接口
FSMC支持8/16/32位数据宽度,这里LCD是16位宽度的,设置的时候,选择16位宽就行了。FSMC的外部设备地址映像,STM32的FSMC将外部存储器划分为固定大小为256M字节的四个存储块。
STM32的FSMC存储块1用于驱动NOR FLASH/SRAM/PSRAM,被分为4个区,每个区管理64M字节空间,每个区都有独立的寄存器对所连接的存储器进行配置。存储块1的256M字节空间由28根地址线(HADDR[27:0])寻址。
这里HADDR,是内部AHB地址总线,其中HADDR[25:0]来自外部存储地址FSMC_A[25:0],而HADDR[26:27]对4个区进行寻址。
这里用模式A来驱动LCD(当SRAM用)
FSMC 寄存器
对于NOR FLASH/PSRAM控制器(存储块1),通过FSMC_BCRx、FSMC_BTRx和FSMC_BWTRx寄存器设置。
设置FSMC访问外部存储器的时序参数。