stm32开发板开发笔记(5)-2.4寸26万色TFT触摸屏模块

发布者:rockstar6最新更新时间:2016-08-22 来源: eefocus关键字:stm32  2.4寸  26万色  TFT触摸屏模块 手机看文章 扫描二维码
随时随地手机看文章
因为产品要用到显示屏和触摸,就买了一个2.4寸的彩色触摸屏模块。
原理图:
stm32开发板开发笔记(5)-2.4寸26万色TFT触摸屏模块(1) - dzdesigned80 - dzdesigned80的博客
显示屏的驱动芯片是ILI9325 
ILI9325 is a 262,144-color one-chip SoC driver for a-TFT liquid crystal display with resolution of 240RGBx320
dots, comprising a 720-channel source driver, a 320-channel gate driver, 172,800 bytes RAM for graphic data
of 240RGBx320 dots, and power supply circuit.
大概的意思就是 ILI9325 是一颗26万色片上soc的TFT液晶屏驱动芯片,支持的分辨率为240RGB*320,172800个字节的显存。
下面来说说说这几个数字 的含义。
26万色是色阶,具体就是,RGB每种颜色用6个位表示,这样就是64x64x64=262,144,当前主流的手机屏幕应该都是1600万色,就是256*256*256=16777216。
再来说这个172800 :320*240*2.25=172,800 个字节 320 240 很容易理解,2.25在这里是18个bit,也就是说,如果以26万色的色阶填充,填满整个屏幕,需要这么多个字节的数据,算了一下大概是168.75KB。
在看手机屏幕,当前的主流的分辨率是1080P,旗舰手机是2K屏幕,就以普通的1080P 屏幕为例,1920*1080*96=199065600个字节
算了一下,大约是189.84375MB,2K屏幕就已经是300多MB了,手机的处理器性能确实强大。
 
comprising a 720-channel source driver, a 320-channel gate driver
720-channel 和320-channel gate在芯片上是实实在在存在的,720表示240的点的RGB,320就是门驱动。
stm32开发板开发笔记(5)-2.4寸26万色TFT触摸屏模块(1) - dzdesigned80 - dzdesigned80的博客  
上图为芯片管脚图
stm32开发板开发笔记(5)-2.4寸26万色TFT触摸屏模块(1) - dzdesigned80 - dzdesigned80的博客
 上图为管脚尺寸图
 
门输出顺序,这个和取模没有关系的 通过控制Driver Output Control (R01h) 的SM  和GS,可以控制驱动门开启的数序,
这里可能有点显示的效果的控制。
stm32开发板开发笔记(5)-2.4寸26万色TFT触摸屏模块(1) - dzdesigned80 - dzdesigned80的博客
 stm32开发板开发笔记(5)-2.4寸26万色TFT触摸屏模块(1) - dzdesigned80 - dzdesigned80的博客
 
 
和显示编程最相关的是8.2.5. Entry Mode (R03h) 这个寄存器,其影响取模的方式,显示的位置。
stm32开发板开发笔记(5)-2.4寸26万色TFT触摸屏模块 - dzdesigned80 - dzdesigned80的博客
 从上面的描述就是水平方向上的递增递减来看,如果原点没有改动,上图中红色点标出的地方就是原点,
我将这里标记为物理原点。  
 
对比实物图
stm32开发板开发笔记(5)-2.4寸26万色TFT触摸屏模块(1) - dzdesigned80 - dzdesigned80的博客
 ILI9325 has a 16-bit index register (IR), an 18-bit write-data register (WDR), and an 18-bit read-data register
(RDR). The IR is the register to store index information from control registers and the internal GRAM. The
WDR is the register to temporarily store data to be written to control registers and the internal GRAM. The
RDR is the register to temporarily store data read from the GRAM.
Data from the MPU to be written to the internal GRAM are first written to the WDR and then automatically written to the internal GRAM in internal operation. Data are read via the RDR from the internal GRAM.
Therefore, invalid data are read out to the data
bus when the ILI9325 read the first data from the internal GRAM. Valid data are read out after the ILI9325
performs the second read operation.
ILI9325 有一个16位的索引寄存器(缩写 IR),一个18位的写数据寄存器(缩写为WDR),和一个18位的读数据寄存器(缩写为RDR) 。IR用来存储来自控制寄存器和内部GRAM的索引信息,WDR是用来暂存写入到GRAM中的数据的。RDR是用来暂存来自GRAM的数据的。
来自MPU的写GRAM数据第一步写入到WDR,然后通过内部的自动操作,写入到GRAM中。读操作和写操作的道理一样。
因此,第一步读到总线上的数据是无效的,第二步读到的数据才是有效数据。
 
Address Counter (AC)
The address counter (AC) gives an address to the internal GRAM. When the index of the register for setting a
RAM address in the AC is written to the IR, the address information is sent from the IR to the AC. As writing
data to the internal GRAM, the address in the AC is automatically updated plus or minus 1. The window
address function enables writing data only in the rectangular area arbitrarily set by users on the GRAM.
地址计数器用来给内部的GRAM传递地址信息,当要设置AC的信息,先是将这个RAM地址写入IR中,然后传递给AC。
写一个数据到GRAM,AC 自动加1或者减1。 窗口地址功能使得任意写入到GRAM 中数据在窗口显示。
 
昨天一直弄错的一个问题,我想采用上面的配置 AM=0, ID=11  在水平方向上扫描,水平地址增长,垂直地址增长,
然后取模软件这边的设置如下图:
stm32开发板开发笔记(5)-2.4寸26万色TFT触摸屏模块 - dzdesigned80 - dzdesigned80的博客
 配合屏幕的方向,我在扫描的时候做了以上的设置,我将扫描的起点和屏幕的原点重合,
这样在增长方向上都是增加,事实证明这种扫描方式是可以的。
问题出来和软件的配合上
 x=((uint16_t)(pic[2]<<8)+pic[3])-1;    //从图像数组里取出图像的长度
  y=((uint16_t)(pic[4]<<8)+pic[5])-1;    //从图像数组里取出图像的高度
这种方式取出来的x=320
y=240
 
LCD_WR_CMD(EntryMode,0x1030);    //图像显示方向为左下起  行递增  列递减
LCD_WR_CMD(HorizontalAddressStart, StartX);  //水平显示区起始地址 0-239
LCD_WR_CMD(HorizontalAddressEndPosition, StartX+x);            //水平显示区结束地址 0-239             
LCD_WR_CMD(VerticalAddressStart, StartY);      //垂直显示区起始地址 0-319
LCD_WR_CMD(VerticalAddressEndPosition, StartY+y);          //垂直显示区结束地址 0-319    
LCD_WR_CMD(HorizontalGramAddressSet, StartX);            //水平显示区地址
LCD_WR_CMD(VerticalGramAddressSet, StartY);        //垂直显示区地址
 这样在水平方向就会越界,导致?屏。
这种扫描方式x应该是240 y是320 
 
正常的竖屏扫描方式
配合屏幕,竖屏显示
stm32开发板开发笔记(5)-2.4寸26万色TFT触摸屏模块 - dzdesigned80 - dzdesigned80的博客

SS和GS两个位通过控制S1-S720的和G1-G320的方向来确定原点的位置
SS是Source Shift
GS是Gate Shift
stm32开发板开发笔记(5)-2.4寸26万色TFT触摸屏模块 - dzdesigned80 - dzdesigned80的博客

1、坐标原点位置由SS和GS确定。对应 01H和60H命令. 

2、AM和I/D[1:0] 即03H命令,控制其扫描方式 ,这将决定你图片取模方式。正常的取模图片才会正常显示。


关键字:stm32  2.4寸  26万色  TFT触摸屏模块 引用地址:stm32开发板开发笔记(5)-2.4寸26万色TFT触摸屏模块

上一篇:stm32 通用定时器中断
下一篇:stm32开发板开发笔记(1)-开发板主控芯片总体映像

推荐阅读最新更新时间:2024-03-16 15:06

为什么要串口唤醒STOP模式?如何才能实现串口唤醒STOP模式呢?
前言 STM32常见的低功耗模式有三种:睡眠模式、STOP模式以及待机模式,STM32L系列还有其他低功耗模式。这里主要讲的是STOP模式,STOP模式可以通过外部中断或事件唤醒,但是不能通过串口中断唤醒,因为串口中断本身不是外部中断,那么如何才能实现串口唤醒STOP模式呢? 因为我这里只是为了做验证,为了快速验证,我也就没有用RT-Thread的PM电源管理组件进入STOP模式,感兴趣的读者可以用RT-Thread的电源管理组件去实现进行STOP模式。 一、为什么要串口唤醒STOP模式? 想象一下,在某些场合,如果你有一个无线通信模块(例如ESP8266、SIM800C)和STM32通过串口发送AT命令来对接服务器实现与服务
[单片机]
为什么要串口唤醒STOP模式?如何才能实现串口唤醒STOP模式呢?
stm32仿真设置
[单片机]
<font color='red'>stm32</font>仿真设置
MAX3232芯片与stm32芯片通信硬件线路连接和引脚说明
1、硬件连接图 STM32芯片的任意一个串口与上图中的232_RX和232_TX连接,上图中的RS232_TXD和RS232_RXD连接一个9针串口硬件。 2、引脚功能说明 DOUT1(14PIN): RS232线数据输出(到远程RS232系统) RIN1(13PIN): RS232线路数据输入(来自远程RS232系统) ROUT1(23PIN): 逻辑数据输出(至UART) DIN1(11PIN): 逻辑数据输入(来自UART)
[单片机]
MAX3232芯片与<font color='red'>stm32</font>芯片通信硬件线路连接和引脚说明
STM32用STLINK烧写外置FLASH遇到的问题
由于项目需要大量的图片字库还有音频文件,所以外挂了NOR flash和NAND flash,需要用到烧写算法STLDR(就是包含几段在SRAM里面运行的代码),调试的时候遇到了几个问题,都是大意造成的,所以写出来记录一下 首先烧写用到PC端软件是STM32 STLINK Utility,在安装目录下附带了一些常用的flash的烧写算法,但没有我用到的那种,所以只能参考ST-LINK Utility UM手册在…\ST-LINK Utility\ExternalLoader目录下的工程模板上修改,修改需要用到对FLASH的初始化、读写、擦除函数,这个要提前调试好,填到对应的函数内就可以了,后面由上位机自己调用 问题来了,主要
[单片机]
STM32中的看门狗
在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工作,会造成整个系统的陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的模块或者芯片,俗称“看门狗”(watchdog) 。 简单来说,看门狗就是在不停地对我们正在运行的程序进行监视,我们必须在规定的时间的有效的时间内去进行“喂狗”操作,这样看门狗就知道我们的程序正在正常的运行,如果我们程序由于外界原因跑飞了,那么就无法进行喂狗操作,那么看门狗由于饥饿难耐,他就会使我们的单片机进行复位,以便让程序重
[单片机]
STM32再学习——实现完美的RS485
  在远距离通讯中,难免受干扰,因此,伟大的牛人们就创造了一种差分传输的方式——RS485通讯方式(以下简称RS485)。RS485由两根差分线来传输数据,比起RS232来说,其传输的距离更远,搞干扰性更强。当然,也为了节省银子,因此,只保留了一组差分线,也就只能完成同一时刻只接收或发送数据的半双工通讯了。 本文引用地址:http://www.eepw.com.cn/article/182410.htm   在设计中,我们经常使用一个名为Max485的芯片来完成TTL电平至差分电平的转换,这款芯片有一个DE(发送使能)引脚控制着RS485线的数据传输方向,而这个引脚何时高电平,何时低电平对我们的数据交换质量也就起着重大的作用。
[嵌入式]
STM32固件库命名规则
1、系统文件名和源文件名以‘ stm32f10x_’的形式表示。 2、在单一文件中使用的常量在该文件中定义。在多个文件中使用的常量定义在头文件中。所有常量都以大写字母表示。 3、寄存器当做常量看待,同样以大写字母表示,多数情况下,在STM3210X参考手册中使用相同的缩写。 4、外围模块的功能函数的名字,需要有相应的外围模块缩写加下划线这样的前缀,每个单词的首字符要大写。例如SPI_SendData,在一个函数名中,只允许有一条下划线,用来区分外围模块缩写和剩下的函数名。 5、使用X_InitTypeDef中指定的参数初始化X外围模块的函数,被命名为X_Init. 6、复位X外围模块的寄存器为默认值的函数,命名为X_DeInit。
[单片机]
如何使用STM32实现systick的精确延时
SYSTICK寄存器初始化 void SysTick_Configuration(void) { if (SysTick_Config(SystemCoreClock / 100)) { while (1); } NVIC_SetPriority(SysTick_IRQn, 0x0); } SysTick_Config默认时钟为SysTick_CLKSource_HCLK,所以在这之前使用SysTick_CLKSourceConfig()选择系统时钟不会改变systick的时钟 static __INLINE uint32_t SysTick_Config(uint32_t ticks) { if (ticks 》 Sys
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved