STM32直接驱动RGB接口的TFT数字彩屏设计

来源:本站
导读:目前正在解读《STM32直接驱动RGB接口的TFT数字彩屏设计》的相关信息,《STM32直接驱动RGB接口的TFT数字彩屏设计》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《STM32直接驱动RGB接口的TFT数字彩屏设计》的详细说明。
简介: 随着LCD显示技术的迅速发展,LCD显示屏得到了广泛的应用。一般来说,对于RGB总线接口的数字屏都需要有控制器才能正常显示,但是本文利用STM32处理器设计出了一种能直接挂载RGB接口数字屏的方法。

引言

随着工业技术的不断发展,人机界面的开发及应用空前火热,为了具有比较友好的人机界面,TFT数字彩屏被广泛的应用,但是TFT彩屏通常都不带有控制器,所以现在驱动彩屏的方案大致有2种:

① 采用ARM9或者更高级别的平台,芯片上带有TFT控制器,可以直接挂接TFT数字屏。

② 采用低端CPU处理器平台,外加TFT控制器模块,再挂接TFT数字屏。

对于方案①来说,系统的复杂度会莫名地增加,再加上该类的平台中主MCU多为BGA封装,对于需求很多小量多样化产品的客户来说,较难以接受这样的方案;而②方案平白无故添加了一个LCD控制器。

这两种方案无论哪一种都增加了硬件成本,本文提出了一种由STM32的FSMC总线直接挂载RGB接口屏的方案,直接由一片CPU(STM32F103VC)来完成TFT屏的显示而且不会占用全部的CPU时间,从而节约了产品的成本。

1 总体方案与硬件整体架构

现在,TFT屏的价格与传统的单色液晶模块的价格几乎相当,甚至比一些尺寸差不多的单色屏还要便宜;而从客户和厂商的角度来看,很多设备/仪器/小型工业装备的制造商也纷纷寻求彩色TFT的设计方案,以提升产品的竞争力和显示效果。基于以上原因,笔者以STM32处理器的FSMC接口挂载RGB接口数字屏并结合DMA传输的方式设计出了一种驱动RGB数字屏的方法。DMA即直接存储器,存取用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。无须CPU干预,数据可以通过DMA快速地移动,这就节省了CPU的资源来做其他操作。本文采用STM32F103VCT6外部挂接ISSI的25616 SRAM 512 KB的静态RAM用作显存,再使用DMA的Memory to Memory模式从外部显存往FSMC的数据线不停地送数据来刷新彩屏,无需CPU的干预。其整体硬件方案如图1所示。

STM32直接驱动RGB接口的TFT数字彩屏设计

图1 STM32F103VCT6整体硬件架构框图

2 软件部分设计及实现

本方案的所有功能都是在STM32内部实现,软件部分主要是对系统、FSMC、DMA、定时器部分的初始化以及参数的设置,同时为了满足RGB数字屏对接口时序的严格要求,本方案采用STM32自带的定时器来产生精确的定时,满足屏接口对时序的严格要求。由DMA的MEMORY TO MEMORY模式完成从SRAM到屏数据接口的数据传输以完成对屏的刷新。

2.1 系统初始化

SystemInit();

GPIOInit();

2.2 FSMC模块介绍以及初始化程序

FSMC即灵活的静态存储控制器,是内置有大容量STM32F10XXX的外部存储控制器。使用这个控制器,STM32F10XXX微控制器可以与许多存储器连接,包括SRAM、NOR闪存和NAND闪存等。FSMC模块如图2所示。

STM32直接驱动RGB接口的TFT数字彩屏设计

图2 FSMC模块

本文FSMC同时挂载SRAM和RGB接口屏,并且数据接口复用,因此对程序中数据总线的时间配置提出了严格的要求,以防止数据总线使用冲突。

FSMC初始化部分代码如下:

p.FSMC_AddressSetupTime=0x00;/*ADDSET地址建立时间*/

p.FSMC_AddressHoldTime=0x00;/*ADDHOLD地址保持时间*/

p.FSMC_DataSetupTime=0x01;/*DATAST数据建立时间*/

p.FSMC_BusTurnAroundDuration=0x00;/*BUSTURN总线返转时间*/

p.FSMC_CLKDivision=0x00; /*CLKDIV时钟分频*/

p.FSMC_DataLatency=0x00;/*DATLAT数据保持时间*/

p.FSMC_AccessMode=FSMC_AccessMode_B;

FSMC_NORSRAMInitStructure.FSMC_Bank=FSMC_Bank1_NORSRAM1;

FSMC_NORSRAMInitStructure.FSMC_DataAddressMux=FSMC_DataAddressMux_Disable;

FSMC_NORSRAMInitStructure.FSMC_MemoryType=FSMC_MemoryType_SRAM;

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体*/

FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE);

2.3 DMA模块介绍及初始化代码

本文采用存储器到存储器之间的数据传输模式,由外部显存SRAM传输数据到FSMC接口来完成数据更新。DMA部分初始化代码如下所示:

DMA_DeInit(DMA1_Channel6);

DMA_InitStructure.DMA_PeripheralBaseAddr=(u32)SRC_Const_Buffer;

DMA_InitStructure.DMA_MemoryBaseAddr=(u32)DST_Buffer;

DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralSRC;

DMA_InitStructure.DMA_BufferSize=BufferSize;

DMA_InitStructure.DMA_PeripheralInc=DMA_PeripheralInc_Enable;

DMA_InitStructure.DMA_MemoryInc=DMA_MemoryInc_Enable;

DMA_InitStructure.DMA_PeripheralDataSize=DMA_

PeripheralDataSize_Word;

DMA_InitStructure.DMA_MemoryDataSize=DMA_

MemoryDataSize_Word;

DMA_InitStructure.DMA_Mode=DMA_Mode_Circular;//使用循环模式不停地从SRAM取数据送屏显示

DMA_InitStructure.DMA_Priority=DMA_Priority_High;

DMA_InitStructure.DMA_M2M=DMA_M2M_Enable;//内存到内存模式

DMA_Init(DMA1_Channel6, &DMA_InitStructure);/* DMA中断使能*/

DMA_ITConfig(DMA1_Channel6, DMA_IT_TC, ENABLE);/* 获得当前计数值*/

CurrDataCounter= DMA_GetCurrDataCounter(DMA1_Channel6);/* DMA使能 */

DMA_Cmd(DMA1_Channel6, ENABLE);

2.4 屏接口时序的实现

由于RGB接口数字屏对时序要求相对来说比较苛刻,所以采用STM32103VCT6的高级定时器来产生精确的时间单位,并以此为最小的时间单位来产生相应的接口时序,

STM32由定时器来控制对TFT的扫描,以保证足够的刷新率。扫描时,STM32的CPU仅仅参与对DMA的设置和显存的操作,由DMA控制器来直接从显存中读取显示数据并送至连接RGB数字总线上,不停地读写。这都是由DMA控制器来完成的,占用CPU的时间是有限的,从而有足够的时间来实现用户程序代码。

结语

经实际证明,本方案是可行的,能保证320×240点阵的TFT的刷新率,且留有足够CPU时间给用户程序。但是对于分辨率较高的彩屏,由于STM32主频的限制,刷屏速度会很慢,达不到应用要求,但是对于一些分辨率适当的彩屏还是能胜任的。

提醒:《STM32直接驱动RGB接口的TFT数字彩屏设计》最后刷新时间 2024-03-14 00:57:19,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《STM32直接驱动RGB接口的TFT数字彩屏设计》该内容的真实性请自行鉴别。