还剩17页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
1绪论
1.1汽车仪表的发展概况在汽车工业的一百多年的发展中,汽车仪表作为其中的重要组成部分,也经历着其自身的发展汽车仪表一般按照其信号的传输方式也从最初的模拟信号到电信号再到如今的数字信号进行着转变现代汽车仪表具有精度高、可靠性强、响应速度快等一系列特点,并且能够准确的将数字、文字、图像等信息进行快速的显示传递给人们如今,国外的发达国家大部分采用的是电子仪表,并向更高一步发展而汽车仪表作为汽车中主要的行驶信息的来源,能够直观的给人们反映汽车各部分的基本信息,其性能、外观以及视觉体验越来越受到重视我国的汽车仪表工业相较于工业发达国家还有一定的距离,其中技术存在一定的差距,虽然在过去的发展中,通过购买引进了先进设备和技术,产品水准达到了国外70年代末,80年代处的水平但对于整体而言,情况仍不容乐观随着计算机和传感器等电子技术的发展,汽车上的电子控制装置的增多也让汽车电子化的进程得以加快与此同时,汽车电子控制装置之间的连接方式也变得越来越复杂以车速信号为例,通过传感器输出的车速信号,需要提供给包括发动机控制、巡航控制、电子仪表、动力转向等在内的十余个电子装置使用但是由于这些电子装置的功能不同,因此也被分布在汽车车体的各个部位,如果采用点到点来进行布线,便会导致结构的复杂程度,增加运维的难度,使其可靠性大大降低所以,解决汽车各电子装置与电子仪表的数据交换是有必要的,汽车仪表网络化的发展也是必然趋势随着汽车产品更新换代的速度变快,汽车仪表的类型也随之变多,针对不同的车型而专门去设计与之匹配的仪表显然会大大增加汽车的成本,而汽车仪表作为汽车信息中枢,所提供给驾驶员的基本信息大体相似,我们可以将各功能信息进行模块化处理来进行设计,在保证满足需求的同时大大降低设计成本
1.2课题的目的及意义汽车仪表系统是驾驶员与汽车进行信息交流的接口与界面,它为驾驶员提供其所需要的信息⑴为了能够让驾驶员更快更有效的了解掌握其中各机构与装置的状态,从而更方便有效的控制汽车,使其正常的工作,汽车仪表作为现代汽车的信息中枢,不仅要求显示直观、清晰、稳定、响应速度快、显示精度高,而且要求体积小、重量轻、便于装配和维护,正变得越来越重要,并伴随着汽车电子技术的发展而快速发展⑵在各种信息中,车速、里程及车门状态等基本功能更需要直观的显示出来提供给驾驶员,使其能迅速准确地判断汽车的状态,保证行驶的安全本课题主要基于STM32的汽车仪表图形化显示长选用的EEPROM芯片型号为24co2该芯片的总容量为256个字节,该芯片通过IIC总线与外部连接HC总线通过开始信号在传送数据过程中共有三种类型信号,分别为开始信号、结束信号和应答信号⑻在数据保存中,可以将32位数据拆成2个16位保存,降低优化保存数据所带来的寿命问题这些信号中,起始信号是必须的,结束信号和应答信号可以不要
2.FLASH存储器相较于EEPROM而言,能够快速的进行擦除读写,且价格低于EEPROM存储器FLASH包括两个类型,即NOR FLASH和NAND FLASHNOR FLASH以单个字读取,实现片上执行,在NOR FLASH中既可以保存程序,也能直接执行程序,不必再把代码读到系统RAM中NOR FLSAH通常用来存放固件系统启动代码、PC的BIOS的不需要改写的小程序中NAND FLSAH是以提供极高的单元密度,从而实现单个存储芯片的大容量它主以读取页为单位,所以存放在NAND FLSAH中的应用程序布恩那个直接运行,需先读取到系统的RAM存储区域中,然后再执行NAND FLASH常用于存储海量数据根据需要存储的信息量,设计中选取NOR FLASH存储器进行存储按照不同容量,存储器组织成32个1K字节/页(小容量)、128个1K字节/页(中容量)、256个2K字节/页(大容量)的主存储器块和一个信息块,其中选用的为16Kx64位存储器,其模块组织如下STM32的闪存模块由主存储器、信息块和闪存存储器接口寄存器等3部分组成在信息块中,它的启动程序代码,是用来存储ST自带的启动程序,用于下载代码,而闪存存储器接口寄存器,主要用于控制闪存读写等,是整个闪存模块的控制机构对主存储器和信息块的写入由内嵌的闪存编程/擦除控制器(FPEC)管理;编程与擦除的高电压由内部产生在执行闪存写操作时,任何对闪存的读操作都会锁住总线,在写操作完成后读操作才能正确地进行;既在进行写或擦除操作时,不能进行代码或数据的读取操作
3.6LCD模块LCD作为汽车仪表的显示窗口,LCD模块主要显示车门状态和里程信息常用的显示屏有液晶显示器(LCD)和有机电致发光显示器(OLED)OLED相较于LCD而言,能够自发光,因此对比度大,亮度好,同时造价较高,并且寿命短,在本设计中性价比较低.其中TFT-LCD相交于TN-LCD、STN-LCD而言,它在液晶显示屏的每个像素上都设置有一个薄膜晶体管(TFT),可以有效地克服非选通时的串扰,使显示液晶屏的静态特性与扫描线数无关,从而大大提到图像质量综上比较,TFT-LCD目前在亮度、对比度、寿命、功耗等综合性能上有显著优势,因此作为本设计的显示设备在显示品质方面,以分辨率划分,有220X
176、320X
240、640X
480、800X600,设计中选用
2.4寸320X240显示屏原理图如下由于显示图片时数据量比较大,相较于8位的方式,LCD模块采用16位的并方式与外部相连,这样其速度能够快上一倍其中,LCD模块与STM32的10口有对应关系LCD_BL对应PB0;LCD_CS对应PG12,LCD_RS对应PGO;LCD_WR对应PD5;LCD_RD对应PD4;LCD_D
[150]直接连接FSMCDJ)到FSMCDJ54系统软件设计
3.1软件模块划分由于设计采用的模块化思想,在实现功能时也将个功能通过模块化来划分,其中主要包括主程序模块以及功能模块主程序模块主要用来调度各功能模块,而功能模块包括通信模块、显示模块以及存储模块软件采用C语言来编写,这样能够具有良好的移植性、通用性以及可靠性通信模块主要选用CAN通信来实现通过CAN总线发送及接受报文,实现数据传输显示模块主要选用LCD来实现主要显示汉字、图片两个部分在显示汉字时,因为显示的内容比较少,如果选择调用基本库,会占用较多的内存,并且调用起来会很复杂,因此需要根据显示内容建立字库
4.2CAN通信模块系统实现仪表通信功能主要通过CAN总线发送与接收任务实现通过CAN总线发送缓冲区读取报文并发送和接收缓冲区读取报文,根据J1939协议将数据解析为相应的测量值,保存到各个被检测对象对应的状态变量中或发送信号给对应的邮箱
①SAE J1939通信协议SAE J1939通信协议栈使汽车电子产品的开发变得简捷、快速所有在SAE J1939规范中定义的通讯装置都可用该软件来实现,从而使汽车电子产品开发者能够集中精力进行自己应用软件的开发这种基于OSI层模型的协议软件具有标准组件的结构,这种结构最适于移植到特殊的目标系统通过配置文件,SAE J1939通信协议栈能够被精确地移植,完全适合特定应用的需要,因此要求这种通信协议栈完全由C源代码编写所提供的源代码、文档、例子程序使用户能够很快地应用SAE J1939软件进行工作所有的源代码、例子程序都能够在参考平台上直接运行
②1939协议栈1数据链路层CAN控制芯片实现了几乎全部的数据链路层内容,但J1939对该层进行了一些修改,如对ID号重新进行了定义,J1939只支持扩展帧模式
[9]O2传输层根据J1939协议实现接收和发送报文的算法,有两种传输模式,分别是广播通讯TP-BAM和连接管理TP-CM,都被J1939协议栈支持
③信号处理CAN数据提取完毕之后,通过协议的规定将数据解析出来其中数据包括数据类型、数据长度、数据范围和表示符解析过程通过提取数据包的PGN偏移号根据J1939协议的规定进行其中车门状态量信号选取J1939协议中的后两位2进制数表示,“00”为关闭,“01”打开当数据帧发送的PGN码为65421时,则根据分组号来判断显示状态流程图如下4CAN软件实现本设计中,通过中断方式进行CAN总线的数据收发,CAN总线的接口初始化和测试主要是由CAN_Configuration void函数来实现的相关代码如下
4.3LCD显示程序设计
4.
3.1TFTLCD的驱动一般的LCD的驱动流程都是一样的,主要分为硬复位、初始化以及读/写GRAM指令来完成其流程图如下由于选用的LCD的硬复位是与MCU连接的,这样直接通过MCU的复位引脚对LCD进行复位即可,同时、还能够节省一个10口如果在没有连接,则需要将RST接到MCU的10上,在初始化之前,先拉低电平,延迟100ms之后再释放RST,完成对了LCD的硬复位LCD的初始化序列一般是厂家直接提供的,不同的厂家初始化的序列是不一样的在LCD初始化时,只需要输入相应的ID就可以在LCD初始化之前,还要对GPI0和FSMC初始化
4.
3.2底层函数与结构LCD中的七个底层函数,分别为写寄存器值函数、读/写数据函数、写寄存器内容函数、读寄存器内容函数、开始写GRAM函数和写GRAM函数其中写寄存器函数中通过对寄存器编号的选用,来选择FSMC的时序控制方式,此时的RS值为0o写数据函数通过对DATA的数据进行写入,实现数据的传输,此时的CS、WR以及10都是直接由FSMC来进行控制,不需要进行选择,而RS的值此时为1写寄存器内容函数可以由写寄存器函数和写数据函数一起来代替,不过在使用写寄存器函数时需要先通过对寄存器编号的操作再进行寄存器值的写入读寄存器内容函数主要通过返回值将内容进行传递写GRAM函数主要通过对写颜色值来确定16位颜色数据的显示其中LCD还有部分结构用来对LCD的信息进行设置如LCD宽度width、高度height、驱动型号id、横竖屏dir通过这些结构体来对显示信息进行划分,主要在函数LCD_DISPLY中来实现功能选择
4.
3.3描点显示功能第一步是在屏幕上实现一个点的显示首先是通过LCD_SETCURSOR函数来实现点的确认,即在画点功能,也就是通过对屏幕进行坐标的划分,确定一个点的位置然后再对屏幕的大小进行设置,确保所选的目标点不会超出屏幕的大小范围函数中具体是通过先发送X和Y的高8位,再发送坐标的低8位设置坐标以后,再对点的颜色进行确认,即写入GRAM指令函数中主要通过LCD_DRAWPOINT来实现,选用设置一个全局变量,对点的颜色值进行选取
4.
3.3字符串显示字符串的显示是通过先对一个字节的显示,然后进行循环对下一个字节的显示来实现的主要函数为LCD_SHOWSTRING确定了字符串的起始地址后,在显示下一个字符的时候,需要对下一个字符的起始坐标进行处理显字符主要分为三个步骤首先要对点阵进行选取,字符的显示是通过点阵集来实现的显示字符是需要确定一个字符对应点阵集的字节数字符显示的内容需要与通过ASCH字库对应的模来进行选取,因为ASCH是从空格开始取模的,在确定对应关系上应该减去空格,从而保持对应关系然后需要设置显示的参数信息,包括显示字体大小、显示方式字体的大小主要可选12*
12、16*16和24*24三种,设计中选用的是12*12的字体大小在字节上,需要用两个字节来表示,第一个字节的高8位是有效的,第二个字节的高四位有效,而低四位无效在显示方式上可以选叠加方式和不叠加方式两种最后选择显示的区域,即通过X、Y坐标确定显示的区域
4.
3.3图片显不在选择图片时,需要考虑图片的格式问题常见的图片格式有很多种,分别为bmp、png jpd、gif等设计中选用时需要考虑到的有图片的内存大小、分辨率、格式支持等方面设计中用到的是jpd格式的图片,主要考虑的是显示的大小符合硬件支持,并且不需要对图片进行压缩处理,这样能够更为广泛的选择显示时图片所需要考虑到的扫描方式问题使用图片时一,需要考虑图片文件的数据结构,即图片中所包含的显示内容和类型其中内容包括图像的宽度、高度和颜色信息等在显示图片时,首先需要对图片进行解码解码使用的是image21cd软件,可以直接将图片解码然后生成.c文件在文件生成后需要将其放入程序的源码文件image中,通过MD5将解码文件加入程序所在的工程中就可以了对图片显示之前需要对图像数据进行定义,即设定图片的扫描方式、灰度值、宽度、高度、以及颜色分量的排列顺序扫描方式是通过定义中scan来选择,共8位BIT1和BITO中[00]表示水平扫描,数据水平,字节垂直;[00]表示水平扫描,[01]表示垂直扫描,[10]表示数据水平,字节垂直,[H]表示数据垂直,字节水平;BIT2和BIT3表示保留;BIT4中选0表示WORD类型高低位字节顺序与PC相同,选1表示WORD类型高低位字节顺序与PC相反;BIT5中选0表示字节内像素数据从高位到低位排列,选表示字节内像素数据从低位到高位排列;BIT6中选0表示自顶至底扫描,选1表示自底至顶扫描;BIT7中选0表示自左向右扫描,选1表示自右向左扫描灰度值在定义中通过gray来设置其中选1表示单色;2表示四灰;4表示十六灰;8表示256色;12表示4096色;16表示16位彩色;24表示24位彩色;32表示32位彩色颜色分量排列顺序通过定义中rgb来选择,每两位表示一种颜色分量其中[00]表示空白;[01]表示红色;[10]表示绿色;[11]表示蓝色显示函数void image_show根据上述定义对图片进行设置要注意的是显示色素点时需要对图片的数据存储进行字节的转换,因为图片的数据是一个字节进行存储的,即8位数据,而显示时的数据是16数据
4.6存储模块内置闪存模块可以在通用地址空间直接寻址,任何32位数据的读操作都能访问闪存模块的内容并得到相应的数据读接口在闪存端包含一个读控制器,还包含一个AHB接口与CPU衔接这个接口的主要工作是产生读闪存的控制信号并预取CPU要求的指令块,预取指令块仅用于在「Code总线上的取指操作,数据常量是通过D-Code总线访问的这两条总线的访问目标是相同的闪存模块,访问D-Code将比预取指令优先级高这里要特别留意一个闪存等待时间,因为CPU运行速度比FLASH快得多,STM32F103的FLASH最快访问速度W24Mhz,如果CPU频率超过这个速度,那么必须加入等待时间,使用STM32为72Mhz的主频,那么FLASH等待周期就必须设置为2,该设置通过FLASH_ACR寄存器设置FLASH编程流程图如下在FLASH编程的时候,还需要判断缩写地址是否被擦除了其中STM32的闪存擦除方式有两种页擦除和整片擦除其中页擦除流程图如下在访问FLASH时;需要用到一下几个函数锁定解锁函数void FLASH_Unlockvoido在对FLASH进行写操作前必须先解锁,解锁操作也就是必须在FLASH_KEYR寄存器写入特定的序列KEY1和KEY2,;同样的道理,在对FLASH写操作完成之后,我们要锁定FLASH,使用的库函数是voidFLASII_Lockvoido
2.写操作函数固件库提供了三个FLASH写函数FLASH Status FLASH ProgramWorduint32_t Address,uint32_t Data;FLASHStatus FLASH_ProgramHalfWorduint32_t Address,uintl6_t Data;FLASH_Status FLASH_Program0ptionByteDatauint32_t Address,uint8_t Data;其中FLASH_ProgramWord为32位字写入函数,其他分别为16位半字写入和用户选择字节写入函数32位字节写入实际上是写入的两次16位数据,写完第一次后地址+
23.擦除函数固件库提供三个FLASH擦除函数FLASH StatusFLASH ErasePageuint32_t PageAddress;页擦除函数,根据页地址擦除特定的页数据FLASH_StatusFLASH_EraseAlIPagesvoid;擦除所有的页数据FLASH StatusFLASH_EraseOptionBytes void;擦除用户选择字节数据主要是用的函数是FLASH StatusFLASH_GetStatus void;返回值是通过枚举类型定义的typedefenum{FLASH_BUSY=1,〃忙FLASH_ERROR_PG,〃编程错误FLASH_ERROR_WRP,〃写保护错误FLASH COMPLETE,〃操作完成FLASH_T IME0UT〃操作超时FLASH_Status;
5.等待操作完成函数在执行闪存写操作时,任何对闪存的读操作都会锁住总线,在写操作完成后读操作才能正确地进行;既在进行写或擦除操作时,不能进行代码或数据的读取操作在每次操作之前,都要等待上一次操作完成这次操作才能开始使用的函数是FLASHStatusFLASHWaitForLastOperationuint32_t Timeout入口参数为等待时间,在等待一段时间后,通过的到不同的返回值来确定FLASH的状态
1.3课题的研究内容1CAN通信协议、TFT液晶工作原理分析,形成设计方案和系统结构框图2基于FSMC的TFT液晶接口设计,仪表主界面设计3液晶显示模块的硬件、软件设计4CAN通信系统硬件选型与协议软件的设计,获取车速、里程、车门状态等数据5综合调试调试是检测实验合理性与正确性中的重要部分,更是确保实验能够有效完成的基本环节本设计主要对显示的内容进行调试,并确保能够达到预期效果
5.1软件调试1)设计中对软件的编写部分主要通过MDK5来完成的,在编译过程中,很多工程都需要进行全编译,这样会浪费很多时间经过调试发现需要进行全编译的工程,是因为输出文件和MDK的工程目录不在同一个文件夹下在生成编译文件时,通常情况下是存放于USER文件夹内的,而如果存放在其他的子文件夹内,就需要进行全编译2)在实现字符串显示时,需要用到中英文字符编码查询工具,同时,也可以选择PCtoLCD软件进行字符生成,如下图3)显示汉字时,如果显示的汉字内容很多,可以直接调用字库;如果需要显示制定的汉字,就需要用到字库制作软件设计中的字库主要通过文字点阵字库生成器来制作,而如果只需要显示单个汉字,可以直接通过汉字内码查询器进行内码查询,然后添加到文件中就可以了4)图片的编码主要使用IMG2LCD软件来完成,将选取的图片选取合适的参数进行解码,然后将生成的文件放入工程的文件中就可以了如下图6致谢毕业设计不仅让我学习到了很多专业相关的理论知识,并且能够运用到实际当中,同时还进一步认识到自己学习的不足之处,让我收获巨大设计期间的研究工作舞步倾注这我的老师的心血和汗水,使我能够迅速的进入找到设计研究方向,圆满的完成毕业设计在这里由衷的感谢我的老师刘显荣教授在整个设计中对我的帮助和教导,同时,老师渊博的知识以及敬业的精神让我受益匪浅,获益终生另外,我要感谢孙炳潇、秦淮勇同学在课程设计之间对我的帮助,从而顺利完成毕业设计最后感谢在百忙中评阅论文和参加答辩的专家、教授参考文献[1]《基于嵌入式系统的汽车仪表信息系统的研究与开发》徐保松-《车辆工程》-2007[2]《嵌入式汽车中央显示系统的设计与实现》谭杉杉-《检测技术与自动化装置》-2007[3]《新一代车内网络总线一一FlexRay》陈松[1]王红燕[2]-《拖拉机与农用运输车》-2008[4]《汽车LIN总线数据监视器的设计与实现》沈万松-《淮阴工学院学报》-2012[5]《一种汽车CAN/LIN网络的硬件设计方法》童世华-《重庆职业技术学院学报》-2008[6]《中国汽车电子市场发展情况报告》庚晋-《集成电路应用》-2005[7]《CAN节点的可靠性分析》李平[1,2]刘连浩[2]-《湖南农机》-2007[8]《厂2c总线原理及其通信的初步实现》张志伟[1]张灵[2]-王爱[2]-《机械管理开发》-2004[9]《SAE J1939协议栈设计及uC/OS—II系统下的开发平台的研究》夏继强李晓君曹磊孙进-《汽车工程》-
20082.汽车总线及仪表显示技术
2.3汽车总线及比较
2.
3.IFlexRay总线简介FLexray总线是一种高速的汽车总线,其标准于2000年发布,并作为新一代汽车内部主干网络,有着良好的发展趋势Flexray在传输速度、网络利用率以及系统灵活性等方面有着区别于其他传统汽车通信的独特优势它支持两个速度达到10Mbps的通信信道,并且能够提供冗余和非冗余通信,由于具有很高的灵活性,因此能够对传输方式进行调节,而不是将所有的信息都进行冗余传输,极大的减少了带宽的损耗Flexray采用同步时基的访问方式,并且能够通过协议自动建立和同步来提供给应用,因此能够保持较高的精确度,同时它通过在通信周期中给与特定信息已固定的位置,能够在通信循环的周期中,提前让接收器知道信息到达的时间,大大减小了临时偏差幅度,具有良好的可靠性⑶
2.
3.3LIN总线简介LIN(本地互联网络)总线用于汽车分布式电子系统中,它是一种低成本串行通讯系统,主要是对CAN总线的一种补充,它采用单线传输的传输方式,能够将开关、显示器、传感器和执行器等简单控制设备连接起来的串行通信网络⑷LIN采用单主机/多从机的总线拓扑结构(没有总线仲裁),仅实用一根信号总线
2.
3.4M0ST总线简介MOST汽车通讯协议最初构想于90年代中期,主要面向汽车内部的媒体通讯,具有严格的车载环境的要求它允许采用多种包括星形和环形布局在内的拓扑结构,当汽车电源被接通时,结构中的MOST节点就能够全部激活,直接将数据直接从接收器传送到至发器,从而来保持结构的畅通
2.
3.5各总线基于CAN总线的比较LIN为CAN的补充,两者一般结合使用,与CAN总线相比,LIN总线控制方式的成本较低是最大的优势;从高容错性的比较而言,CAN总线的目标应用是汽车的高速和多路数据通信⑸CAN总线目前依旧在汽车电子控制中被广泛使用,相对于CAN总线而言,Flexray成本还很高,不能实际应用MOST主要用于音视频流传输的基于光纤的总线,不能用于控制LIN专门应用于低端系统,作为CAN的辅助网络或子网络在不需要CAN总线的带宽和多功能的场合,比如智能传感器和制动装置之间的通信,使用LIN总线可以大大节省成本未来整个网络将是CAN、LIN、MOST三网合一的整体MOST负责音视频,CAN负责重要的电子控制单元,如发动机、ABS、安全气囊等,LIN负责次要的电子控制单元,如门窗、车灯等⑹Fl exRay能够把所有系统连接在一起,同时为汽车系统以一个整体而不是分散的多个系统工作提供了机会使用FlexRay后,汽车的安全系统将从这一全新的整合中获益,从而显著提高汽车的安全性能
2.1CAN总线简介CAN是一种汽车产业中得到广泛实用的数据与控制通信网络,是一种极强韧性的电气规范和协议,专门设计用于汽车中危险且无法预料的环境,具有极高的可靠性和容错能力⑺1986年2月,Robert Bosch公司在SAE年会上推出一种新型的串行总线系统一CAN ControllerArea Network,并在20世纪90年代初得到推广使用CAN网络是现场总线技术的一种,在国际中应用广泛它能够有效检测和执行汽车内部的数据通信,并具有良好的通信速度与距离,被广泛的应用在现代汽车中
2.2CAN总线特点CAN总线与一般的通信总线相比,具有强可靠性、实时性及灵活性高等突出特点汽车行驶在过程中,是具有一定危险性的,如果数据不能进行及时有效的传输,进而反映出来,会造成严重的后果CAN总线的通信格式是采用短帧格式,传输速率快,受干扰概率低,能够及时有效的进行数据传输,并且它具有检错效果,保证了数据的正确性,以及数据通信的可靠性同时,CAN通信能够进行多点传输,能够将各种检测信号进行网络化的传输
4..
3.1FSMC扩展存储器接口按不同电路时序逻辑匹配的方式,嵌入式系统接口有三种基本的扩展方法专用接口芯片扩展,10模拟时序接口扩展,时序可编程芯片扩展和通信扩展专用接口芯片扩展是最简单的扩展方法,使用时只需要将接口芯片和CPU直接相连,不需要考虑硬件的兼容问题10模拟时序接口扩展是一种灵活的、硬件成本最低的扩展方式,MCU与接口电路之间的时序完全用软件编程实现同时也会受制于CPU主频,耗费大量的CPU时间,效率低下时序可编程芯片扩展技术采用软硬件相结合的扩展方法,适合接口时序复杂,工作速度要求高的系统现对三种扩展技术进行比较专用接口芯片一般通过硬件来实现,其灵活性低适用范围窄,只支持并行接口扩展方式,但CPU的效率高,传输速率快,因为成本最高;10口模拟时序接口采用软件来实现,灵活性最高适用范围宽,同时支持并行跟串行接口扩展方式,需要CPU进行大量运算,因此CPU的效率低,传出速度慢,但成本低;时序可编程技术采用的是软件跟硬件相结合的方式,灵活性较高适用范围窄,同时支持串行跟并行接口扩展方式,CPU效率高,传输速度较快,成本较高1FSMC简介FMSC(可变静态存储控制器),是STM32内部集成的时序可编程部件,通过内置若干时序模型对时序参数进行编程设置在扩展外部存储器方面,能够灵活、方便、快捷的设置来扩展大容量存储器,是一种新型的存储控制技术在STM32系类中,只有引脚数在100脚以上的高存储密度微控制器才具有这种独特的存储控制机构FSMC实质上是一种MCU内嵌的可编程时序部件,通过综合考虑各种存储芯片的特点,对外提供地址、数据、控制三条总线对应连接存储器同时,通过内置若干不同的时序模型以匹配不同的存储芯片,对每种时序模型配上相应的时序参数,通过寄存器对时序模型和参数进行选择配置,从而大大提高传输性能FSMC支持多种静态存储器类型如SRAM、ROMs PSRAM.NOR FlashNAND Flash存储器STM32通过FSMC可以与存储器的引脚直接连接在存储方面,可以通过异步读或写操作来设置多种数据宽度;在同步突发访问方式的时候支持不同的存储器类型NOR、PSRAM和NAND在映射的地址空间中FSMC通过不同且相互独立的Bank存储块来扩展不同的存储类型当使用多个外部存储器时,为了防止每个存储器对总线访问而造成的访问冲突时,FSMC会通过设置总线悬空延迟时间参数来解决通过设置FSMC的时间参数这种灵活的方式来调整存储芯片的读写速度,能够进一步拓宽用户的选择通常代码执行的过程中要先调入MCU的内部SRAM,通过FSMC外部扩展方式,存储器中的代码可以直接运行2FSMC工作原理FSMC连接到STM32的内核CortexM3是通过内部高速总线AHB来实现的,另一端与FSMC相连的是扩展存储器的外部总线当外部存储器的访问信号发送到AHB总线后,传送到FSMC上,通过FSMC转换成与外部存储器对应的信号,从而送到外部存储器的相应引脚,来实现外部存储器之间的数据交互FSMC的框图如下3FSMC驱动LCD原理FSMC在驱动LCD时,是将LCD当作一个外部SRAM来进行操作的在操作LCD的时候主要需要用到RS、D0-D
15.WR、RD和CS这些信号在设计中RS与A10连接,通过控制A10来改变RS信号,当RS信号分为0和1时分别代表着写/读命令STM32的FSMC同时支持8位16位32位数据宽度,本设计选用的LCD是16位宽度的,在设置的时候应选择16位宽设计中选用的是NORFLASH模式控制LCD,因此只需要将STM32寻址空间的地址映射中的0x60000000-0x6FFFFFFF分配给NORFLASH,并将FSMC外设被设置为正常工作即可FSMC的存储模块图如下通过存储模块划分图可以看出,拥有4个存储块Bank的FSMC总共管理1GB空间,在本设计中用到的是存储块BanklSTM32的FSMC存储块1Bankl又被分为4个区,每个区管理64M字节空间,每个区都有独立的寄存器对所连接的存储器进行配置Bankl的256M字节空间由28根地址线HADDR[27:0]寻址地址总线,其中HADDR[25:0]来自外部存储器地址FSMC_A[25:0],而HADDR[26:27]对4个区进行寻址如下表所示FSMC在完成地址总线会自动在内部进行错位对齐处理,不需要考虑外部设备的位数,FSMC_A[O]都是接在外部设备地址A
[0]所以在选择外部设备为16位的存储器时,FSMC的一个地址对应两个字节,于是需要将内部地址总线AHB进行设置,即将其进行右移处理即可STM32的FSMC各BANK配置寄存器如表STM32的FSMC支持的异步突发访问模式包括模式
1、模式A-D的多时序模型,驱动SRAM一般使用模式1或模式A,本设计中,使用模式A来驱动LCD模式A的读操作时序如下图模式A支持独立的读写时序控制,TFTLCD在读写时速度不一致,读的时候会比写的时候要慢,如果读写用一样的时序,那么只能以速度慢的时序为基准,也就是读的时序,从而导致写的速度变慢;还有一个办法就是在读时序完成后,重新对FSMC的延时进行配置,然后再进行写时序的操作,这样虽然能够同时对读写程序的各种配置来优化效率,但是需要进行多次配置,效率降低如果有一套相应的读写时序的配置,能够在初始化的时候就已经对读写程序进行过相应的配置,在使用时,就可以大大减少对时序的配置,同时满足需求模式A的读操作时序如下图4用FSMC模拟8080并口时序FSMC写NOR时序跟8080并口时序是很相似的,现进行对比8080信号线与FSMC信号线的[D150]的存储器操作周期都是用来控制数据信号;其中8080信号线的D/CX用对数据和命令的选择,而FSMC信号线是用RS来进行的;8080信号线的CSX可以用来对应FSMC的NEX,表示片选信号的控制;8080信号线的WRX可以用来对应FSMC的NWR,表示片选信号的控制;8080信号线的RDX可以用来对应FSMC的NOE,表示片选信号的控制将FSMC地址线中的A0连接8080的D/CX,当A0为低电平时数据线D[15:0]的信号会被理解为IL19341命令,若A0为高电平时,传送的信号会被理解为数据当传送数据时,只需要将最低位为奇数的地址写入数据,此时的地址线A0会为高电平,反之,则可以读出命令5FSMC的初始化初始化FSMC主要是初始化三个寄存器FSMC_BCRx,FSMC_BTRx,FSMC_BWTRx,完成4种类型存储器的初始化主要分为两个部分1)读时序通过readWriteTiming.FSMC_AddressSetTime这条语句来地址设置地址建立时间因为STM32的FSMC性能存在问题,高电平持续的时间为190ns,所以设置为lo通过readWriteTiming.FSMC_DataSetsupTime来设置数据保存时间,最大为355ns,根据时钟周期,计算出设置为152)写时序通过writeTiming.FSMC AddressSetTime这条语句的地址来建立数据保持时间同理,设置为1o通过writeWriteTiming.FSMC DataSetsupTime来设置数据保存时间,为50ns,根据时钟周期,计算出设置为33系统硬件设计
3.1系统总体结构本设计采用的是基于Cortex-M3内核的STM32系列单片机它具有处理器性能高、功率消耗低、性价比高等一系列特点,是现在的主流单片机由于其简单的结构和强大的功能,使其应用较为广泛STM32F103VC自带256K字节的闪存程序存储器,并向外扩展SRAM,能够满足设计的需要本设计是基于STM32来完成的,其中分为三个模块,分别是存储模块、通信模块以及显示模块其框图如下设计中需要用到按键来实现控制功能,需要选择引脚PAO和PA
4.显示部分分三总线来传输,地址总线部分A0到A15分别接DO到D15,CS和RS接PGO和PG2,WR和RD分别接PD4和PD5CAN通信的CS、RS分别与PB8和PB9相连HD7279的CS、CLK、DATA、KEY分别与STM32F103的管脚PCO—PC3连接其原理图如下
3.3系统电源设计本仪表的大部分器件是+5V、+
3.3V供电的由于设计中的供电环境是汽车,而汽车的蓄电池的电压为+12V,并且汽车在工作时会因为负载变化导致电压产生波动,因此要将电压模块进行电平转换,LCD模块的输入电平为
3.3V,STM32的输出电平为5V,由于输入电平高于输出电平,LCD可正确接收到逻辑T5V转
3.3V原理图如下
3.5存储模块汽车仪表的一些参数信息需要存储,主要为车门状态显示图片及里程信息可选用CPU内部FLASH存储和外部扩展EEPROM存储器1EEPOM可擦除次数较多,寿命长;擦除速度很快,但相对于RAM而言还是很。