STM32f103的TFTLCD和FSMC的使用
2015-07-23 10:29
591 查看
多功能采集显示平台将通过 STM32 的 FSMC 接口来控制 TFTLCD 的显示,所以本节分为两个部分,分别介绍 TFTLCD 和 FSMC。
TFT -LCD 即薄膜晶体管液晶显示器。其英文全称为:Thin Film Transistor-Liquid Crystal Display。TFT - LCD 与无源 TN - LCD、STN - LCD 的简单矩阵不同,它在液晶显示屏的每一个象素上都设置有一个薄膜晶体管(TFT),可有效地克服非选通时的串扰,使显示液晶屏的静态特性与扫描线数无关,因此大大提高了图像质量。TFT -LCD 也被叫做真彩液晶显示器。FSMC ( Flexible Static Memory Controller ,可变静态存储控制器)是STM32系列采用一种新型的存储器扩展技术。在外部存储器扩展方面具有独特的优势,可根据系统的应用需要,方便地进行不同类型大容量静态存储器的扩展。
多功能采集显示平台使用的LCD的驱动芯片是 ILI9325,有一个16位的变址寄存器(IR)、一个18位的写数据寄存器(WDR)和一个18位的读数据寄存器(RDR)。变址寄存器(IR)存储来自控制寄存器和内部的GRAM的指令信息。写数据寄存器(WDR)用来暂时存储要被写到控制寄存器和内部的GRAM中的数据。读数据寄存器(RDR)用来暂时存储从GRAM中读取的数据。MPU中要写入内部GRAM的数据,首先写到写数据寄存器(WDR),然后再又内部操作自动的写到内部的GRAM 中。要读取的数据要通过读数据寄存器(RDR)从内部GRAM 中读取。因此无效数据将被读到数据总线,当ILI9325从内部的GRAM中读取第一个数据的时候,有效数据将在ILI9325进行了第二次读操作之后被读出。同时使用FSMC驱动TFTLCD的显存工作,可以极大地提升LCD的显示效率和刷屏频率。相对于以往使用IO口控制LCD屏幕来说,使用FSMC的优势在于MCU可以将内存的数据通过并行总线直接传送至LCD显存,极大地提高了速度,保证了LCD的显示刷新频率。经过简单测试,使用IO口控制的LCD的刷新频率大概可以达到14帧一秒,使用FSMC的控制的LCD的刷新频率大概可以达到28帧一秒,效率足足提升了100%,这足以使得多功能采集显示平台的显示模块达到显示要求。
TFTLCD 和 FSMC设置的一般步骤可以总结为如下几个步骤:
1.设置 STM32 与 TFTLCD 模块相连接的 IO
2.配置相应IO的功能
3.并设置FSMC,并使能 FSMC Bank1_SRAM Bank
4.TFTLCD硬复位
5.初始化相应TFT的序列
6.通过函数将需要的图像或者文字显示在TFTLCD上面
TFTLCD接口如下:
初始化函数代码如下:
相关代码已上传:http://download.csdn.net/detail/devintt/8925341
关于优化
多功能采集显示平台需要要求每秒刷新屏幕10次,尽管刷新频率较低,但是如果使用先将全屏幕刷白,再通过计算添加不同的界面控件,这样的方法难以保证刷新屏幕的工作正常进行。有了优化显示,所以这里使用了局部刷新的方法,根据需要修改的显示区域进行刷白处理,其余的显示不变。这样处理有一个好处,就是需要修改的部分才进行刷新,保证了其他显示部分不受修改的部分的影响。同时采用局部刷新的方法可以大大的减少FSMC的写入数据量从而可以减少刷屏时间。
为了保证LCD的刷屏操作正常进行,多功能采集显示平台增添了专门的定时器用于控制CPU响应屏幕刷新的操作,中断级别稍高,以防一些操作打断显示刷屏。另一方面,经过一系列的实验,为了保证刷新能力还有50%的剩余,加上一些突发中断的测试,最终制定了一秒刷新10次的方案。
TFT -LCD 即薄膜晶体管液晶显示器。其英文全称为:Thin Film Transistor-Liquid Crystal Display。TFT - LCD 与无源 TN - LCD、STN - LCD 的简单矩阵不同,它在液晶显示屏的每一个象素上都设置有一个薄膜晶体管(TFT),可有效地克服非选通时的串扰,使显示液晶屏的静态特性与扫描线数无关,因此大大提高了图像质量。TFT -LCD 也被叫做真彩液晶显示器。FSMC ( Flexible Static Memory Controller ,可变静态存储控制器)是STM32系列采用一种新型的存储器扩展技术。在外部存储器扩展方面具有独特的优势,可根据系统的应用需要,方便地进行不同类型大容量静态存储器的扩展。
多功能采集显示平台使用的LCD的驱动芯片是 ILI9325,有一个16位的变址寄存器(IR)、一个18位的写数据寄存器(WDR)和一个18位的读数据寄存器(RDR)。变址寄存器(IR)存储来自控制寄存器和内部的GRAM的指令信息。写数据寄存器(WDR)用来暂时存储要被写到控制寄存器和内部的GRAM中的数据。读数据寄存器(RDR)用来暂时存储从GRAM中读取的数据。MPU中要写入内部GRAM的数据,首先写到写数据寄存器(WDR),然后再又内部操作自动的写到内部的GRAM 中。要读取的数据要通过读数据寄存器(RDR)从内部GRAM 中读取。因此无效数据将被读到数据总线,当ILI9325从内部的GRAM中读取第一个数据的时候,有效数据将在ILI9325进行了第二次读操作之后被读出。同时使用FSMC驱动TFTLCD的显存工作,可以极大地提升LCD的显示效率和刷屏频率。相对于以往使用IO口控制LCD屏幕来说,使用FSMC的优势在于MCU可以将内存的数据通过并行总线直接传送至LCD显存,极大地提高了速度,保证了LCD的显示刷新频率。经过简单测试,使用IO口控制的LCD的刷新频率大概可以达到14帧一秒,使用FSMC的控制的LCD的刷新频率大概可以达到28帧一秒,效率足足提升了100%,这足以使得多功能采集显示平台的显示模块达到显示要求。
TFTLCD 和 FSMC设置的一般步骤可以总结为如下几个步骤:
1.设置 STM32 与 TFTLCD 模块相连接的 IO
2.配置相应IO的功能
3.并设置FSMC,并使能 FSMC Bank1_SRAM Bank
4.TFTLCD硬复位
5.初始化相应TFT的序列
6.通过函数将需要的图像或者文字显示在TFTLCD上面
TFTLCD接口如下:
初始化函数代码如下:
/**********************管脚配置**********************************************/ void LCD_guanjiao(void) { u16 a=1000; GPIO_InitTypeDef GPIO_InitStructure; RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE | RCC_APB2Periph_GPIOF | RCC_APB2Periph_GPIOG ,ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_14 | GPIO_Pin_15; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOD, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15; GPIO_Init(GPIOE, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_Init(GPIOF, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; GPIO_Init(GPIOG, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOD, &GPIO_InitStructure); GPIO_ResetBits(GPIOD, GPIO_Pin_11); //管脚复位 while(a--); GPIO_SetBits(GPIOD, GPIO_Pin_11); }
/******************************FSMC配置*********************************/ void LCD_FSMC() { FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure; FSMC_NORSRAMTimingInitTypeDef p; p.FSMC_AddressSetupTime = 0x02; //地址建立时间 p.FSMC_AddressHoldTime = 0x00; //地址保持时间 p.FSMC_DataSetupTime = 0x05; //数据建立时间 p.FSMC_BusTurnAroundDuration = 0x00; p.FSMC_CLKDivision = 0x00; p.FSMC_DataLatency = 0x00; p.FSMC_AccessMode = FSMC_AccessMode_B; // 一般使用模式B来控制LCD FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM4; FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; //FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM; FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_NOR; FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure); /* 使能 FSMC Bank1_SRAM Bank */ FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM4, ENABLE); }
相关代码已上传:http://download.csdn.net/detail/devintt/8925341
关于优化
多功能采集显示平台需要要求每秒刷新屏幕10次,尽管刷新频率较低,但是如果使用先将全屏幕刷白,再通过计算添加不同的界面控件,这样的方法难以保证刷新屏幕的工作正常进行。有了优化显示,所以这里使用了局部刷新的方法,根据需要修改的显示区域进行刷白处理,其余的显示不变。这样处理有一个好处,就是需要修改的部分才进行刷新,保证了其他显示部分不受修改的部分的影响。同时采用局部刷新的方法可以大大的减少FSMC的写入数据量从而可以减少刷屏时间。
为了保证LCD的刷屏操作正常进行,多功能采集显示平台增添了专门的定时器用于控制CPU响应屏幕刷新的操作,中断级别稍高,以防一些操作打断显示刷屏。另一方面,经过一系列的实验,为了保证刷新能力还有50%的剩余,加上一些突发中断的测试,最终制定了一秒刷新10次的方案。
相关文章推荐
- 默认价格 /ofbiz13.07/applications/product/widget/catalog/ProductFor
- 目录管理之可配置商品
- Codeforces 560B Gerald is into Art(构造性算法)
- iOS应用启动时不占满全屏,上下有黑边
- hdu 3572 Task Schedule(多源多汇)
- webapp 开发 ---- phonegap 环境搭建
- 在Hadoop2.2.0上运行Wordcount小程序
- iOS navigationBar颜色
- android单元测试
- iOS 7的手势滑动返回
- Linux -- 是一个操作系统,1991年由linus Torvalds发布的,核心是kernel版本号
- Android 保持亮屏
- OFBiz + Opentaps 目录管理 一. 基本概念
- 设立sql语句在控制台的输出
- BP算法代价函数的偏导数
- zoj 3469 Food Delivery (区间dp)
- fedaro关于mysql的编译问题
- Eclipse常用快捷键
- Java大数练习第二弹
- HTML5引擎Construct2技术剖析(一)