

免费预览已结束,剩余23页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
湖南农业大学东方科技学院全日制普通本科生毕业论文基于stm32的触摸屏控制设计based on stm32 and touch tcreen control design学生姓名: 学 号:年级专业及班级:2008级信息工程(2)班指导老师及职称:学 部:理工学部提交日期:2012年5月湖南农业大学东方科技学院全日制普通本科生毕业论文(设计)诚信声明本人郑重声明:所呈交的本科毕业论文是本人在指导老师的指导下,进行研究工作所取得的成果,成果不存在知识产权争议。除文中已经注明引用的内容外,本论文不含任何其他个人或集体已经发表或撰写过的作品成果。对本文的研究做出重要贡献的个人和集体在文中均作了明确的说明并表示了谢意。同时,本论文的著作权由本人与湖南农业大学东方科技学院、指导教师共同拥有。本人完全意识到本声明的法律结果由本人承担。 毕业论文(设计)作者签名:(作者手写签名) 年 月 日目 录摘要1关键词11前言21.1arm应用背景21.2研究内容31.3研究成果42stm32处理器的概述42.1stm32简介42.2stm32的参数52.3内部资源53图片的处理和显示实现方法73.1液晶显示电路设计:73.2图片的处理73.2.1总体方案与硬件整体架构73.2.2本例中fsmc的使用93.2.3ili9325103.3显示实现103.3.1tftlcd字显示113.3.2tftlcd图显示123.4供电部分电路设计134软件设计模块144.1程序编写步骤144.2系统初始化174.3stm32的开发软件174.4fsmc模块介绍以及初始化程序174.5屏接口时序的实现185运行方法和结果195.1硬件电路连接195.2程序编写步骤195.3现象和结果196结论20参考文献20致谢20 基于stm32的触摸屏控制设计摘 要:伴随着科技的发展,现代电子产品中的单片机和触摸屏在手机、导航仪器、电子测试仪器以及咨询终端等设备中都有很广泛的应用。作为一种单片机,stm32采用了arm先进架构的cortex-m3内核,它不仅在实时性、功耗控制、外设以及集成整合方面都显得非常不错,并且易于开发,可使产品快速进入市场。本文设计主要是基于stm32的开发板,通过100p对stm32进行串口虚拟仿真,结合c 语言,使用stm32的fsmc模块的时钟对fsmc模块以及lcd的启动配置进行初始化,再控制lcd显示各种字符和图形,从而实现对tft屏的控制。本设计的触摸屏作为一种信息交流的媒介,具有着编程灵活、反应速度快、体积小以及低耗能的优点,它为触摸屏在今后面向更智能、更人性的方面发展提供了科学的参考依据。关键词:stm32;触摸屏;fsmc;arm;薄膜晶体管based on stm32 and touch tcreen control designniversity, changsha 410128)abstract:withthedevelopmentofscienceandtechnology,thesingle-chipmicrocomputerandtouchscreenofmodernelectronicproductshaveaverywiderangeofapplicationsindevices, suchasmobilephones,navigationalinstruments,electronicstestinstrumentandconsultingterminal.asamicrocontroller,stm32isusedthearmscortex-m3core.itisnotonlyperformedwellinsomeaspectsofreal-time,powercontrol,peripheralsandintegration,butalsoeasytodevelopandallowtheproductstoentrancemarketquickly.papersdesignismainlybasedonthestm32sdevelopmentboard.inordertocontrolthetftscreen,through100p,itconductedserialvirtualsimulationtostm32andcombinedwiththeclanguageandusedthestm32sfsmcmoduleoftheclocktoinitializefsmcmoduleandthestartupconfigurationoflcd,andthenitdisplayedallkindsofcharactersandgraphicsoflcd.thetouchscreenserveasamediumofinformationexchangeinthisdesignwhichhassomeadvantagesofprogrammingflexibility,fastresponse,smallsizeandlowpower.itprovidedscientificreferencebasisforthetouchscreensdevelopmentinaspectofintelligenceandhumanitytheinthefuture.key words: stm32;touch screen ; fsmc;arm;thin film transistord1 前言1.1 arm应用背景 现在社会中嵌入式的应用已经大范围的普及到现实生活中,越来越多的电子产品已经不能被8位处理器所满足,比如gui,tcp/ip,filesystem等。而arm处理器具有非常强大的处理能力和比较低的功率消耗,这些电子产品在选型的时候会选择arm处理器1。arm的嵌入式应用有很多:工业领域作为32的risc架构,基于arm的微控芯片在高端微控器市场和低端微控制应用领域都有不小的市场份额。和传统的8/16位的微控制器相比arm芯片不仅功耗低而且在性价比方面也有很大的优势2。一个典型的arm嵌入式工业控制系统的功能模块如图: 传感器 转换器lcdled键盘adcarm处理器dac主机epromrami/o接口 图1 arm嵌入式工业控制系统的功能模块fig.1 arm embedded industrial control system function module无线通信领域目前已有超过85%的无线通讯设备采用了arm的技术。网络应用随着带宽技术的推广,采用arm技术的adsl芯片正逐步获得竞争优势。特别在语音和视频的处理上有很大的优势。成像和安全产品现在的数码相机和打印机绝大部分都是采用的arm技术。手机的32位智能卡也采用的事arm技术。数码相机的功能模块:消费类电子产品arm技术在目前流行的数字音频播放器、数字机顶盒和游戏中得到广泛的采用3。1.2 研究内容本设计的主要目的是对大学四年知识的综合和加深对arm的学习以及提高动手能力和解决问题的能力。本次设计是基于stm32的开发板,通过对开发板的学习,掌握stm32的一些基本功能。通过对100p对stm32进行虚拟仿真,来对tft屏的控制。主要是使用stm32的fsmc模块的时钟去初始fsmc模块,然后初始化lcd的启动配置,来控制lcd显示各种字符、图形。tft采用的是2.4“tft320x240lcd(控制器ili9325)”,采用cpu的fsmc功能,lcd片选cs采用fsmc_nei(p88),fsmc_a16(p58)作为lcd的rs选择,fsmc_nwe(p86)作为lcd的/wr,fsmc_noe(p85)作为lcd的/rd,lcd的reset脚用cpu的pe9(p98)(lcd-rst),fsmc_fsmc_d15和lcd的db1-db8 db10-db17相互连接,触摸屏接口采用sp11接口,片选pb-sp11-cs3,触摸电路的中断申请由pb6-7846-int接收。tft液晶显示屏是薄膜晶体管型液晶显示屏。tft液晶为每个像素都设有一个半导体开关,每个像素都可以通过点脉冲直接控制,因而每个节点都相对独立,并可以连续控制,不仅提高了显示屏的反应速度,同时可以精确控制显示色阶,所以,tft液晶的笆彩更真4。本文中采用的tft液晶屏分辨率位320x240,采用的控制芯片为ili9320,自带总大小为172 820(240x320x1818)的显存,模块的16位数据线与显寸的对应关系为565方式,它支持多种控制输入信号。lcd 寄存地址为:0x6000 0000lcd 数据区地址:0x6002 0000电路引脚图如下:图2 tft320x240lcd引脚图fig.2 the tft320x240lcd pin diagram本文的第一章讲述了该论文的写作背景,主要是说明arm的应用范围和论文的研究内容;第二章讲述该研究课题使用的开发板的内部资源和开发板核心芯片stm32f103ve脚的各项参数;第三章着重讲述图片的处理和显示实现方法;第四章介绍本研究的软件设计模块;第五章讲述测试方法和结果。1.3 研究成果配置好各通道后,编译运行工程,将程序烧入arm芯片。点击rst,通过tft显示屏可以观察到一副完整的图片。2 stm32处理器的概述2.1 stm32简介stm32系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的arm cortex-m3内核。按性能分成两个不同的系列:stm32f103“增强型”系列和stm32f101“基本型”系列。增强型系列时钟频率达到72mhz,是同类产品中性能最高的产品;基本型时钟频率为36mhz,以16位产品的价格得到比16位产品大幅提升的性能,是16位产品用户的最佳选择。两个系列都内置32k到128k的闪存,不同的是sram的最大容量和外设接口的组合。时钟频率72mhz时,从闪存执行代码,stm32功耗36ma,是32位市场上功耗最低的产品,相当于0.5ma/mhz。stm32f103xx增强型系列使用高性能的arm/cortex-m3/32位的risc内核,工作频率为72mhz,内置高速存储器(高达128k字节的闪存和20k字节的sram),丰富的增强i/o端口和联接到两条apb总线的外设。所有型号的器件都包含2个12位的adc 、3个通用16位定时器和一个pwm定时器,还包含标准和先进的通信接口:2个i2c和spi、3个usart、一个usb和一个can。stm32f103xx增强系列工作的温度范围是-40度到105度,运行电压的幅度在2.0到3.6v。完整的stm32f103xx增强型产品引脚从36到100有五种不同的封装形式;不同的封装形似相应的外设配置也不同。这些丰富的外设配置,造就了stm32f103xx增强型微控制适合在多种场合去应用:电机驱动和应用控制、医疗和手持设备、pc外设和gps平台、可编程控制器、打印机、警报系统等5。2.2 stm32的参数stm32芯片的引脚图:图3 stm32f103xx增强型lqpfp48管脚图fig.3 stm32f103xx enhanced lqpfp48pin map2.3 内部资源stm32有丰富的内部资源,如下所示:realview mdk(miertocontroller development kit)基于arm微控制器的专业嵌入式开发工具;内置闪存存储器;内置sram;嵌套的向量式中断控制器(nvic);外部中断/事件控制器(exti);时钟和启动;自举模式;dma ;rtc(实时时钟)和后备寄存器 ;窗口看门狗;i2c总线 ;通用同步/异步接受发送器(usart);串行外设接口(spi);控制器区域网络(can) ;通用串行总线(usb); 通用输入输出接口(gpio); adc(模拟/数字转换器) ;温度传感器; 串行线jtag调试口(swj-dp)3。2.3 cortex-m3简介arm公司于2005年推出了cortex-m3内核,就在当年arm公司与其他投资商合伙成立了luminary(流明诺瑞)公司,由该公司率先设计、生产与销售基于cortex-m3内核的arm芯片-stellaris(群星)系列arm。cortex-m3是arm公司基于arm v7架构的新型芯片内核6。cortex-m3内核包含一个适用于传统thumb和新型thumb-2指令的译码器、一个支持硬件乘法和硬件除法的先进alu、控制逻辑和用于连接处理器其他部件的接口。cortex-m3处理器是首款基于armv7-m架构的arm处理器7。中央cortex-m3内核使用3级流水线哈佛架构,运用分支预测、单周期乘法和硬件除法功能实现了出色的效率(1.25dmips/mhz)。cortex-m3处理器是一个32位处理器,带有32位宽的数据路径、寄存器库和基于传统arm7处理器的系统只支持访问对齐的数据,沿着对齐的字边界即可对数据进行访问和存储8。cortex-m3处理器采用非对齐数据访问方式。cortex-m3中央内核基于哈佛架构,指令和数据各使用一条总线(如图所示)。内核流水线分3个阶段:取指、译码和执行。当遇到分支指令时,译码阶段也包含预测指令取指,这提高了执行的速度,处理器在译码阶段期间自行对分支目的地指令进行取指。在稍后的执行过程中,处理完全分支指令后便知道下一条要执行的指令。如果分支不跳转,那么紧跟着的下一条指令随时可供使用。如果分支跳转,那么在跳转的同时分支指令可供使用,空闲时间限制为一个周期9。cortex-m3内核图如下: 图4 cortex-m3内核框图fig.4 the cortex-m3 kernel diagramcortex-m3处理器是专为那些对成本和功耗非常敏感但同时对性能要求又相当高的应用而设计的。凭借缩小的内核尺寸和出色的中断延迟性能、集成的系统部件、灵活的配置、简单的高级编程和强大的软件系统,cortex-m3处理器将成为从复杂的芯片系统到低端微控制器等各种系统的理想解决方案。与cortex-m3不同,arm7系列处理器使用vonneumann架构,指令和数据共用信号总线以及存储器10。由于指令和数据可以从存储器中同时读取,所以cortex-m3处理器对多个操作并执行,处理器对多个操作并行执行,加快了应用程序的执行速度11。cortex-m3处理器与arm7作比较见。3 图片的处理和显示实现方法3.1 液晶显示电路设计:tft驱动系统包括信号输入、信号处理、cpu控制、信号输出几个主要部分。核心部分为信号处理。以下是tft液晶显示器的显示电路:图5 液晶显示电路fig.5 liquid crystal display circuit3.2 图片的处理:3.2.1 总体方案与硬件整体架构现在,tft屏的价格与传统的单色液晶模块的价格几乎相当,甚至比一些尺寸差不多的单色屏还要便宜;而从客户和厂商的角度来看,很多设备仪器小型工业装备的制造商也纷纷寻求彩色tft的设计方案,以提升产品的竞争力和显示效果4。以stm32处理器的fsmc接口挂载rgb接口数字屏并结合dma传输的方式设计出了一种驱动rgb数字屏的方法。dma即直接存储器,存取用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。无须cpu干预,数据可以通过dma快速地移动,这就节省了cpu的资源来做其他操作。本文采用stm32f103vet6外部挂接issi的25616 sram 512 kb的静态ram用作显存,再使用dma的memory to memory模式从外部显存往fsmc的数据线不停地送数据来刷新彩屏,无需cpu的干预。在stm32上开发lcd显示,可以有两种方式来对lcd进行操作,一种是通过普通的io口,连接lcm的相应引脚来进行操作,第2种是通过fsmc来进行操作。可变静态存储控制器(flexible static memory controller: fsmc) 是stm32系列中内部集成256 kb以上flash,后缀为xc、xd和xe的高存储密度微控制器特有的存储控制机制。之所以称为“可变”,是由于通过对特殊功能寄存器的设置,fsmc能够根据不同的外部存储器类型,发出相应的数据/地址/控制信号类型以匹配信号的速度,从而使得stm32系列微控制器不仅能够应用各种不同类型、不同速度的外部静态存储器,而且能够在不增加外部器件的情况下同时扩展多种不同类型的静态存储器,满足系统设计对存储容量、产品体积以及成本的综合要求。fsmc有很多优点:其一:支持多种静态存储器类型。stm32通过fsmc可以与sram、rom、psram、nor flash和nandflash存储器的引脚直接相连。其二:支持丰富的存储操作方法。fsmc不仅支持多种数据宽度的异步读/写操作,而且支持对nor、psram、nand存储器的同步突发访问方式。其三:支持同时扩展多种存储器。fsmc的映射地址空间中,不同的bank是独立的,可用于扩展不同类型的存储器。当系统中扩展和使用多个外部存储器时,fsmc会通过总线悬空延迟时间参数的设置,防止各存储器对总线的访问冲突。其四:支持更为广泛的存储器型号。通过对fsmc的时间参数设置,扩大了系统中可用存储器的速度范围,为用户提供了灵活的存储芯片选择空间。其五:支持代码从fsmc扩展的外部存储器中直接运行,而不需要首先调入内部sram。fsmc包含两类控制器:1个nor闪存/sram控制器,可以与nor闪存、sram和psram存储器接口;1个nand闪存/pc卡控制器,可以与nand闪存、pc卡,cf卡和cf+存储器接口。控制器产生所有驱动这些存储器的信号时序:16位数据线,用于连接8位或16位的存储器;26位地址线,最多可连续64mb的存储器(这里不包括片选线);5位独立的片选信号线;1组适合不同类型存储器的控制信号线:控制读/写操作、与存储器通信,提供就绪/繁忙信号和中断信号、与所用配置的pc卡接口:pc存储卡、pc i/o卡和真正的ide接口。从fsmc的角度看,可以把外部存储器划分为固定大小为256mb的4个存储块。存储块1用于访问最多4个nor闪存或者psram存储设备。这个存储区被划分为4个nor/psram区,并有4个专用的片选。存储块2和3用于访问nand闪存设备,每个存储块连接一个nand闪存。存储块4用于访问pc卡设备每一个存储块上的存储器类型是由用户在配置寄存器中定义的12。注意:fsmc只是提供了一个控制器,并不提供相应的存储设备,至于外设接的是什么设备,完全是由用户自己选择,只要能用于fsmc控制,就可以,像本次实验中,我们接的就是lcm。3.2.2 本例中fsmc的使用利用fsmc对lcm进行操作,因此不用完全懂得fsmc的所有功能,而是懂得一部分相应的操作即可。fsmc包含以下4个模块:ahb接口(包含fsmc配置寄存器)、nor闪存和psram控制器、nand闪存和pc卡控制器、外部设备接口。需要注意的是,fsmc可以请求ahb进行数据宽度操作。如果ahb操作的数据宽度大于外部设备(nor或nand或lcd)的宽度,此时fsmc将ahb操作分割成几个连续的较小的数据宽度,以适应外部设备的数据宽度。fsmc对外部设备的地址映像从0x6000 0000开始,到0x9fff ffff结束,一共4个地址块,每个地址块256mb,而每个地址块又分成4个分地址块,大小为64mb。对于nor的地址映像来说,我们可以通过选择haddr27:26 来确定当前使用的是哪个64m的分地址块。而这四个分存储块的片选,则使用 ne4:1来选择。数据线/地址线/控制线是共享的。这里的haddr 是需要转换到外部设备的内部ahb地址线,每个地址对应一个字节单元。因此,若外部设备的地址宽度是8位的,则haddr25:0与stm32的cpu引脚 fsmc_a25:0一一对应,最大可以访问64m字节的空间。若外部设备的地址宽度是16位的,则是haddr25:1与stm32的cpu引脚fsmc_a24:0一一对应。在应用的时候,可以将fsmc_a总线连接到存储器或其他外设的地址总线引脚上。3.2.3 ili9325由于我们使用的是stm32开发板,其内部自带的是一个lcm,而lcm中的驱动ic就是采用的ili9325。ncs: ic的片选信号。如果是低电平,则ili9325是被选中,并且可以进行操作,如果是高电平,这不被选中。rs: 寄存器选择信号。如果是低电平,则选择的是索引或者状态寄存器,如果是高电平,则选择控制寄存器。nwr/scl: 写使能信号,低电平有效。nrd: 读使能信号,低电平有效。以上内容是从ili9325的datasheet里面找到的,但是根据我的实际操作发现,似乎高电平也是有效的。而且,不管是高电平还是低电平,都可以成功驱动lcd,如果有了解情况的可以讨论一下。ili9325的寄存器非常多,详细的各个寄存器的功能请参考ili9325的datasheet。在对ili9325进行操作时,应该先写地址,然后再写数据,设置好各个寄存器之后,ili9325就可以开始工作了。3.3 显示实现tft的lcd控制器ili9325寄存器采用16位控制器。80口有cs、wr、rd、d15:0、rst、rs这些信号线。cs表示tft片选信号,为0时,片选成功。wr表示向tftlcd写入数据,上升沿有效。rd表示从tftlcd中读取数据,上升沿也有效。d15:0表示16位双向数据线,可读可写。rst表示硬复位tftlcd,为1时写有效。rs表示命令或数据标志,0表示读写命令,1表示读写数据。tftlcd模块的rst信号线直接接到stm32的复位脚上,由于不用软件来控制,就省下了一个io口。 ili9325模板控制器自带显存,显存大小为240*320*18/8,也就是18位模式下的显存量。ili9325的数据线和显存的关系是565的关系。即如下图所示:图6 ili9325数据线和显存的关系fig.6 the ili9325 data lines and the memory of the relationship最低的5位代表的是蓝色,中间6位是绿色,最高的5位是红色。并且相应的数字越大表示颜色就会越深。ro有两个功能,即读和写操作。如果对ro进行写操作,那么最低位位osc,用于开启或者关闭振荡器。如果对ro进行读操作,就会返回控制器的型号。这个命令的最大功能就是可以通过它获得控制器的信号,而我们可以根据不同型号的控制器去进行不同的初始化。93xx系列的初始化区别不大,我们完全可以用一个代码控制几个控制器。 r3是入口的模式命令,r3中的i/d0、i/d1、am这三个位控制屏幕的方向。 am控制gram的更新方向,即当am取0时,地址以行的方式更新。当am取值为1是就以列的方向更新。 i/d1:0表示在更新了一个数据后,就会根据这两个位来设置控制地址计数器自动增加或者减少。r7是显示命令。是用来命令cl位去控制8位彩色和26万色的。当取值为0时,就表示26万色,取值1就是8位色。d1、d0、basee这三个位是用来控制显示开关的,当全部取1时就表示显示,取0就关闭。r32、r33是用来设置gram的行地址和列地址的。r32是用来设置列地址y坐标范围(0-239),r33是用来设置行地址x坐标范围(0-319)。去颜色的时候就是把这两个命令设置到改点,然后写入颜色。r34是写数据到gram的命令。只有写入这个命令后,地址器才可以自动增加和减少。这是一个单个操作的命令,只需要写入值就可以。r80_r83表示行列gram地址位置设置,用这几个命令可以设定显示区域。在tft屏中有时候我们只需要在其中的一份区域写入数据就可以了,如果先写坐标后写数据就会使速度变慢。这个时候我们可以通过这几个命令去开辟一个区域,然后不停地丢数据,地址计数器就会自动设置加或者减,这样就可以避免频繁写地址提高刷新速度。3.3.1 tftlcd字显示:每一个字符就是一个图像,字符的大小和图像的大小相对应,字符的笔画和图像的内容相对应。运用字模提取软件把字符转换成一个字节型的数组,数组元素中每一位代表lcd 的一个素点。取值为1就表示该位置为字符的一个笔画需要上色,取值为0就表示不是笔画也不用上色。假如一个字符想要在16x16的面积上显示,也就是说这个字符的宽和高各为16个像素,也就是有16x16/8个字节。在取模的过程中还要注意取模的顺序,不同的顺序就可以得到不同的数组,一般左上角表示的坐标为(0,0)。相同字体的中文字符和asii码的字符宽度有一些不同的地方。asii码的字符宽度是中文字符宽度的1/2。在把一个字符变成一个数组之后,只要对该数组的每个元素依次进行判断,对值为1和0的位进行不同的上色处理就可完成一个字符的绘制。如果在程序中要显示大量的中文字符,就是把这些字符都取模。但这一步已经有人做成了数据库,并且进行了编码。也就是说当我们要在程序中显示大量中文字符的时候,只要按照编码规则去调度数据库的文件,就可以检索到相应的字符。编码规则:每个汉字占两个字节,前一个字节表示区号,后一个字节表示位号。汉字在汉字库的位置为:94x(区号-1)+(位号-1)。94是代表每个区有94个汉字,减1是表示数组从0开始,而区号和位号从1开始。用94x(区号-1)+(位号-1)x一个汉字字模所占字节数来表示汉字具体在数据库中的具体位置。当遇到中文字符和asii码混合在一起的时候,我们应该用asii码最高位是0,而中文的最高位是1去区分asii码和中文字符。显示asii码,字库来自程序内,汉字有两种字库选择方式:一种是代码字库,即有限的字库在代码中保存;另一种是flash字库,在flash汉字库中,暂时程序都是显示的16*16的汉字。代码字库的原理相当简单,采用索引的形式搜索所需要的汉字。字库中的每个字都会由汉字的字符串作为一个索引值,在汉字的显示中,一般都是通过先搜索需要显示的汉字是否在索引中出现。如果找到索引,就使用索引之后的字库代码显示汉字。flash字库的原理就是把字库按照汉字的内码排列好并且烧进flash.在需要的时候就可以显示汉字的内码,并在flash中搜索到对应字库的首地址,读出字库到缓冲,再进写屏。使用flash字库的先决条件是要flash里面带有字库。3.3.2tftlcd图显示:在图片的显示过程中最重要的是扫描的顺序。图片的取模要注意:图7 图片取模fig.7 picture taking mode当am=0时设置 水平扫描 左右扫描依图 上下扫描与图相反当am=1时设置 垂直扫描 上下扫描依图 左右扫描与图相反 用显示图片数组的语句中的前八位字节的左移还是右移去判断高位在前还是地位在前。3.4供电部分电路设计整个系统中的元件均为3.3 v器件。由于系统供电采用电池或者直流电源供电,通过三端稳压芯片lm1117-3.3,为主控芯片stm32f103vet6供电,用二极管in4007串接在电源正极,为系统提供电源反接保护。部分供电部分原理如图:图8 部分供电部分原理图fig.8 part of the power supplying part schematic4 软件设计模块4.1 程序编写步骤对于程序的编写,一般先依次初始化rcc、gpio、fsmc、lcd,再往gram中写入显示数据。其中rcc、gpio、fsmc的初始化函数在stm32的固件库中已经有相应的函数。对lcd的初始化需要编写相应的代码。思路是,首先向寄存器地址写入需要操作的寄存地址(代码),然后根据datasheet向数据区地址写入相应的数据。lcd的初始化应该按照datasheet把每一个寄存器都配置好,而这些寄存器的配置大部分都是通用,只是在屏幕方向选择以及坐标系等略有差别。lcd配置好之后,就可以写入图像数据。在hardeare文件夹下新建一个lcd的文件夹。然后打开user文件夹下的工程,新建一个ili19325的文件夹,保存在lcd的文件夹下面,并且设置头文件的的路径。第一个是lcd_wr_data函数,该函数是通过80口子向lcd模块中写入一个16位的数据,使用频率最高的,一般都采用宏定义的方式来提高速度13。函数代码:#define lcd_wr_data(data)lcd_rs=1;lcd_cs=0;dataout(data);lcd_wr=0;lcd_wr=1;lcd_cs=1;第二个是lcd_wr_reg函数,这个函数是把8位寄存器命令通过80并口写入lcd模块中。这里的由于函数的使用频率不高,就通过lcd_rs去标记lcd_rs=0还是lcd_rs=1。函数代码:void lcd_wr_reg(u8 data )lcd_rs=0;/写地址lcd_cs=0;dataout(data);lcd_wr=0;lcd_wr=1;lcd_cs=1;第三个读命令/数据的函数。lcd_readreg函数是用来读取寄存器的值。在读寄存器的值之前,先要写入该寄存器的命令,再设置d15:0位输入,在读取完寄存器的值之后,再设置io口为输出:函数代码:u16 lcd_readreg(u8 lcd_reg)u16 t; lcd_wr_reg(lcd_reg);/写入要读的寄存器号 gpiob-crl=0x88888888;/pb0-7 上拉输入 gpiob-crh=0x88888888;/pb8-15 上拉输入 gpiob-odr=0xffff;/全部输出高 lcd_rs=1; lcd_cs=0;/读取数据 lcd_rd=0; lcd_rd=1; t=datain; lcd_cs=1; gpiob-crl=0x33333333;/pb0-7上拉输出 gpiob-crh=0x33333333;/pb8-15 上拉输出 gpiob-odr=0xffff;/全部输出高 return t;第四个是读取gram的函数。tftlcd模块为彩色,用16位色计算需要150字节。在图形的叠加工程中,应该先读回原来的值,然后写入新的值,完成叠加,再恢复原来的值。tftlcd模块数据的函数为lcd_readram,该函数直接返回读到的gram值。函数在使用之前要先设置读取gram地址,去实现lcd_setcursor函数。函数程序: u16 t; lcd_wr_reg(r34);/选择gram地址 gpiob-crl=0x88888888;/pb0-7 上拉输入 gpiob-crh=0x88888888;/pb-15 上拉输入 gpiob-odr=0xffff;/全部输出高 lcd_rs=1; lcd_cs=0;/读取数据(读gram时,需要读2次) lcd_rd=0; lcd-rd=1; lcd-rd=0; lcd-rd=1; t=datan;lcd_cs=1;gpiob-crl=0x33333333;/pb0-7 上拉输出gpiob-crh=0x33333333;/pb8-15 上拉输出gpiob-odr=oxffff;/全部输出高return t;第五个就是lcd_setcursor函数,该函数用来设置坐标。函数程序:void lcd_setcursor(u8 xpos,u16 ypos) lcd_writereg(r32,xpos); lcd_writereg(r33,ypos);(xpos,ypos)为要写入或读取的像素点坐标,利用r32和r33两个命令。第六个是画点函数lcd_drawpoint,这个函数带2个参数x和y,代表tftlcd上的坐标。x的范围是0到239,y的范围是0到319。根据全局变量point_color去确定写入的颜色。函数程序:void lcd_drawpoint(u8x,u16y) lcd_setcursor(x,y);/设置光标位置 lcd_wr_reg(r34);/开始写入gram lcd_wr_data(point_color);第七个是lcd_showchar也就是字符显示函数,这里的字符显示函数多了叠加方式显示或者非叠加方式显示。叠加方式显示一般用在图片上显示字符。非叠加一般用于普通显示1415。4.2系统初始化syslemlnit();gpioinit();4.3 stm32的开发软件 stm32采用了iar、mdk、ride三种软件平台进行开发。iar是stm32开发使用最多的软件平台,iar提供iar for arm两种版本供免费评估:32k学习版,32k学习版,只能支持编译32k目标代码,等效无时间限制 ;30天评估版,无编译代码限制15。自从keil被arm收购之后,在keil中集成arm的编译器,并改名为mdk。ride是支持gcc编译器编译器开发stm32 的产品。keil是众多单片机应用开发的优秀软件之一,它集编辑编译仿真于一体,支持汇编,plm语言和c语言的程序设计,界面清晰,易学易懂。本课题选择的是keilmdk16。4.4 fsmc模块介绍以及初始化程序fsmc就是flexible static memory controller即可变静态存储控制器,是内有大量的外部存储控制器。使用这个控制器可以和大量的存储器去链接,包括sram、nor闪存和nand闪存等。fsmc模块如图:图9 fsmc模块fig.9 the fsmc module本课题fsmc同时挂载sram和rgb接口屏,并且复用数据接口,因此对运行程序中的数据总线的时间配置提出了非常严格的要求,来预防数据总线使用的冲突。4.5 屏接口时序的实现由于rgb接口数字屏对时序要求比较严格,即采用stm32f103vet6的高级定时器来产生精确时间单位,并用最小的时间单位来产生相对应的时序接口,stm32由定时器来控制对tft屏的扫描,来保证足够的刷新率。扫描的时候,stm32的cpu只参与对dma的设置和显存的操作,再由dma控制器直接从显存中提取显示数据,并将数据发送到rgb数字总线上。由于占用cpu的时间是有限的,所以都是用dma控制器来完成,从而有总够的时间来实现用户程序代码。一般不用外扩模式。时序的计算需要根据nor闪存存储器的特性来计算这些参数。在写或者读访问时序是存储器片选信号的下降沿与上升沿之间的时间,可以用fsmc时序参数的函数计算得到:写/读访问时间=(addset+1)+(datast+1)x hclk在写操作中,衡量写信号的下降沿与上升沿之间的时间参数用datast来衡量:写使能信号由低到高的时间= t wp =datast x hclk为了得到正确的fsmc时序配置,即在最大的读/写访问时间、不同的fsmc内部延迟、不同的存储器内部延迟时候应该特别考虑:(addset +1)+(datast+1)x hclk=max(t wc ,t rc)datast x hclk=t wpdatast必须满足:datast=(t avqv +tsu(data ne)+tv(a_ne)/ hclkaddset4当hclk的频率是72mhz,使用模式b,则有以下时序:地址建立时间:0x1地址保持时间:0x0数据建立时间:0x55 运行方法和结果5.1 硬件电路连接1 将2.4寸的tft显示屏插到stm32的板子上。2 安装驱动程序pl2303安装完成后在电脑设备管理器端口里面会有一个虚拟串口(com3)。3 安装stmicroelectronics flash loader4 把boot0跳帽连接到“1”上,按一下复位键对mcu进行复位操作。5.2 程序编写步骤对于程序的编写,一般先依次初始化rcc、gpio、fsmc、lcd,再往gram中写入显示
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 那曲市中储粮2025秋招写作案例分析万能模板直接套用
- 中国联通黄冈市2025秋招网申填写模板含开放题范文
- 萍乡市中石油2025秋招笔试模拟题含答案法律与合规岗
- 三明市中储粮2025秋招面试专业追问题库购销统计岗
- 2025年警犬寻人考试题及答案
- 中国移动阳江市2025秋招笔试行测题库及答案行业解决方案经理岗
- 新疆地区中石化2025秋招面试半结构化模拟题及答案油气储运与管道岗
- 铜仁市中石化2025秋招笔试模拟题含答案炼油工艺技术岗
- 中国移动钦州市2025秋招写作案例分析万能模板直接套用
- 国家能源杭州市2025秋招笔试题库含答案
- 机加工安全生产培训考核试题及答案(班组级)(精)
- 电梯从业证考试试题及答案解析
- 2024年武汉商学院公开招聘辅导员笔试题含答案
- DB32-T 5156-2025 零碳园区建设指南
- 人教版三年级数学上册第一单元分层作业设计
- 2024年国庆中秋安全教育主题班会《欢度双节 安全护航》主题安全教育【课件】
- 浙教版(2024)科学八年级上册 2.1力(第2课时)课件
- 中国外卖大战报告(中英)-高盛-202507
- 咖啡对身体健康的影响研究
- DB32∕T 4569-2023 发泡陶瓷保温板 保温系统应用技术规程
- 2025-2030中国地坪研磨机行业市场发展趋势与前景展望战略研究报告
评论
0/150
提交评论