版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、重庆科技学院本科生毕业论文绪论1 绪 论1.1 汽车仪表的发展概况在汽车工业的一百多年的发展中,汽车仪表作为其中的重要组成部分,也经历着其自身的发展。汽车仪表一般按照其信号的传输方式也从最初的模拟信号到电信号再到如今的数字信号进行着转变。现代汽车仪表具有精度高、可靠性强、响应速度快等一系列特点,并且能够准确的将数字、文字、图像等信息进行快速的显示传递给人们。如今,国外的发达国家大部分采用的是电子仪表,并向更高一步发展。而汽车仪表作为汽车中主要的行驶信息的来源,能够直观的给人们反映汽车各部分的基本信息,其性能、外观以及视觉体验越来越受到重视。我国的汽车仪表工业相较于工业发达国家还有一定的距离,其
2、中技术存在一定的差距,虽然在过去的发展中,通过购买引进了先进设备和技术,产品水准达到了国外70年代末,80年代处的水平。但对于整体而言,情况仍不容乐观。随着计算机和传感器等电子技术的发展,汽车上的电子控制装置的增多也让汽车电子化的进程得以加快。与此同时,汽车电子控制装置之间的连接方式也变得越来越复杂。以车速信号为例,通过传感器输出的车速信号,需要提供给包括发动机控制、巡航控制、电子仪表、动力转向等在内的十余个电子装置使用。但是由于这些电子装置的功能不同,因此也被分布在汽车车体的各个部位,如果采用点到点来进行布线,便会导致结构的复杂程度,增加运维的难度,使其可靠性大大降低。所以,解决汽车各电子装
3、置与电子仪表的数据交换是有必要的,汽车仪表网络化的发展也是必然趋势。随着汽车产品更新换代的速度变快,汽车仪表的类型也随之变多,针对不同的车型而专门去设计与之匹配的仪表显然会大大增加汽车的成本,而汽车仪表作为汽车信息中枢,所提供给驾驶员的基本信息大体相似,我们可以将各功能信息进行模块化处理来进行设计,在保证满足需求的同时大大降低设计成本。1.2 课题的目的及意义汽车仪表系统是驾驶员与汽车进行信息交流的接口与界面,它为驾驶员提供其所需要的信息1。为了能够让驾驶员更快更有效的了解掌握其中各机构与装置的状态,从而更方便有效的控制汽车,使其正常的工作,汽车仪表作为现代汽车的信息中枢,不仅要求显示直观、清
4、晰、稳定、响应速度快、显示精度高,而且要求体积小、重量轻、便于装配和维护,正变得越来越重要,并伴随着汽车电子技术的发展而快速发展2。 在各种信息中,车速、里程及车门状态等基本功能更需要直观的显示出来提供给驾驶员,使其能迅速准确地判断汽车的状态,保证行驶的安全。本课题主要基于STM32 的汽车仪表图形化显示。1.3课题的研究内容(1)CAN通信协议、TFT液晶工作原理分析,形成设计方案和系统结构框图(2)基于FSMC的TFT液晶接口设计,仪表主界面设计(3)液晶显示模块的硬件、软件设计(4)CAN通信系统硬件选型与协议软件的设计,获取车速、里程、车门状态等数据 19重庆科技学院本科生毕业论文汽车
5、总线及仪表显示技术2.汽车总线及仪表显示技术2.3汽车总线及比较2.3.1FlexRay总线简介FLexray总线是一种高速的汽车总线,其标准于2000年发布,并作为新一代汽车内部主干网络,有着良好的发展趋势。Flexray在传输速度、网络利用率以及系统灵活性等方面有着区别于其他传统汽车通信的独特优势。它支持两个速度达到10Mbps的通信信道,并且能够提供冗余和非冗余通信,由于具有很高的灵活性,因此能够对传输方式进行调节,而不是将所有的信息都进行冗余传输,极大的减少了带宽的损耗。Flexray采用同步时基的访问方式,并且能够通过协议自动建立和同步来提供给应用,因此能够保持较高的精确度,同时它通
6、过在通信周期中给与特定信息已固定的位置,能够在通信循环的周期中,提前让接收器知道信息到达的时间,大大减小了临时偏差幅度,具有良好的可靠性3。2.3.3LIN总线简介LIN(本地互联网络)总线用于汽车分布式电子系统中,它是一种低成本串行通讯系统,主要是对CAN总线的一种补充,它采用单线传输的传输方式,能够将开关、显示器、传感器和执行器等简单控制设备连接起来的串行通信网络4。LIN采用单主机/多从机的总线拓扑结构(没有总线仲裁),仅实用一根信号总线。2.3.4MOST总线简介MOST汽车通讯协议最初构想于90年代中期,主要面向汽车内部的媒体通讯,具有严格的车载环境的要求。它允许采用多种包括星形和环
7、形布局在内的拓扑结构,当汽车电源被接通时,结构中的MOST节点就能够全部激活,直接将数据直接从接收器传送到至发器,从而来保持结构的畅通。2.3.5各总线基于CAN总线的比较LIN 为 CAN 的补充,两者一般结合使用,与 CAN 总线相比,LIN 总线控制方式的成本较低是最大的优势;从高容错性的比较而言,CAN 总线的目标应用是汽车的高速和多路数据通信5。CAN总线目前依旧在汽车电子控制中被广泛使用,相对于CAN总线而言,Flexray成本还很高,不能实际应用。MOST 主要用于音视频流传输的基于光纤的总线,不能用于控制。 LIN 专门应用于低端系统,作为 CAN 的辅助网络或子网络。在不需要
8、 CAN 总线的带宽和多功能的场合,比如智能传感器和制动装置之间的通信,使用 LIN 总线可以大大节省成本。未来整个网络将是 CAN、LIN、MOST 三网合一的整体。MOST负责音视频,CAN 负责重要的电子控制单元,如发动机、ABS、安全气囊等,LIN负责次要的电子控制单元,如门窗、车灯等6。 FlexRay 能够把所有系统连接在一起,同时为汽车系统以一个整体而不是分散的多个系统工作提供了机会。使用 FlexRay 后,汽车的安全系统将从这一全新的整合中获益,从而显著提高汽车的安全性能。2.1CAN总线简介CAN是一种汽车产业中得到广泛实用的数据与控制通信网络,是一种极强韧性的电气规范和协
9、议,专门设计用于汽车中危险且无法预料的环境,具有极高的可靠性和容错能力7。1986年2月,Robert Bosch 公司在SAE年会上推出一种新型的串行总线系统CAN(Controller Area Network),并在20世纪90年代初得到推广使用。CAN网络是现场总线技术的一种,在国际中应用广泛。它能够有效检测和执行汽车内部的数据通信,并具有良好的通信速度与距离,被广泛的应用在现代汽车中。2.2CAN总线特点CAN总线与一般的通信总线相比,具有强可靠性、实时性及灵活性高等突出特点。汽车行驶在过程中,是具有一定危险性的,如果数据不能进行及时有效的传输,进而反映出来,会造成严重的后果。CAN
10、总线的通信格式是采用短帧格式,传输速率快,受干扰概率低,能够及时有效的进行数据传输,并且它具有检错效果,保证了数据的正确性,以及数据通信的可靠性。同时,CAN通信能够进行多点传输,能够将各种检测信号进行网络化的传输。4.3.1FSMC扩展存储器接口按不同电路时序逻辑匹配的方式,嵌入式系统接口有三种基本的扩展方法:专用接口芯片扩展,IO模拟时序接口扩展,时序可编程芯片扩展和通信扩展。专用接口芯片扩展是最简单的扩展方法,使用时只需要将接口芯片和CPU直接相连,不需要考虑硬件的兼容问题。IO模拟时序接口扩展是一种灵活的、硬件成本最低的扩展方式,MCU与接口电路之间的时序完全用软件编程实现。同时也会受
11、制于CPU主频,耗费大量的CPU时间,效率低下。时序可编程芯片扩展技术采用软硬件相结合的扩展方法,适合接口时序复杂,工作速度要求高的系统。现对三种扩展技术进行比较:专用接口芯片一般通过硬件来实现,其灵活性低适用范围窄,只支持并行接口扩展方式,但CPU的效率高,传输速率快,因为成本最高;IO口模拟时序接口采用软件来实现,灵活性最高适用范围宽,同时支持并行跟串行接口扩展方式,需要CPU 进行大量运算,因此CPU的效率低,传出速度慢,但成本低;时序可编程技术采用的是软件跟硬件相结合的方式,灵活性较高适用范围窄,同时支持串行跟并行接口扩展方式,CPU效率高,传输速度较快,成本较高。 FSMC简介FMS
12、C(可变静态存储控制器),是STM32内部集成的时序可编程部件,通过内置若干时序模型对时序参数进行编程设置。在扩展外部存储器方面,能够灵活、方便、快捷的设置来扩展大容量存储器,是一种新型的存储控制技术。在STM32系类中,只有引脚数在100脚以上的高存储密度微控制器才具有这种独特的存储控制机构。FSMC实质上是一种MCU内嵌的可编程时序部件,通过综合考虑各种存储芯片的特点,对外提供地址、数据、控制三条总线对应连接存储器。同时,通过内置若干不同的时序模型以匹配不同的存储芯片,对每种时序模型配上相应的时序参数,通过寄存器对时序模型和参数进行选择配置,从而大大提高传输性能。FSMC支持多种静态存储器
13、类型。如:SRAM、ROM、PSRAM.NOR Flash和NAND Flash存储器。STM32通过FSMC可以与存储器的引脚直接连接。在存储方面,可以通过异步读或写操作来设置多种数据宽度;在同步突发访问方式的时候支持不同的存储器类型:NOR、PSRAM和NAND。在映射的地址空间中FSMC通过不同且相互独立的Bank存储块来扩展不同的存储类型。当使用多个外部存储器时,为了防止每个存储器对总线访问而造成的访问冲突时,FSMC会通过设置总线悬空延迟时间参数来解决。通过设置FSMC的时间参数这种灵活的方式来调整存储芯片的读写速度,能够进一步拓宽用户的选择。通常代码执行的过程中要先调入MCU的内部
14、SRAM,通过FSMC外部扩展方式,存储器中的代码可以直接运行。 FSMC工作原理FSMC连接到STM32的内核CortexM3是通过内部高速总线AHB来实现的,另一端与FSMC相连的是扩展存储器的外部总线。当外部存储器的访问信号发送到AHB总线后,传送到FSMC上,通过FSMC转换成与外部存储器对应的信号,从而送到外部存储器的相应引脚,来实现外部存储器之间的数据交互。FSMC的框图如下: FSMC驱动LCD原理FSMC在驱动LCD时,是将LCD当作一个外部SRAM来进行操作的。在操作LCD的时候主要需要用到RS、D0-D15、WR、RD和CS这些信号。在设计中RS与A10连接,通过控制A10
15、来改变RS信号,当RS信号分为0和1时分别代表着写/读命令。STM32的FSMC同时支持8位16位32位数据宽度,本设计选用的LCD是16位宽度的,在设置的时候应选择16位宽。设计中选用的是NOR FLASH模式控制LCD,因此只需要将STM32寻址空间的地址映射中的0x60000000-0x6FFFFFFF分配给NOR FLASH,并将FSMC外设被设置为正常工作即可。FSMC的存储模块图如下:通过存储模块划分图可以看出,拥有4个存储块(Bank)的FSMC总共管理1GB空间,在本设计中用到的是存储块Bank1。STM32的FSMC存储块1(Bank1)又被分为4个区,每个区管理64M字节空
16、间,每个区都有独立的寄存器对所连接的存储器进行配置。Bank1的256M字节空间由28根地址线(HADDR27:0)寻址。地址总线,其中HADDR25:0来自外部存储器地址FSMC_A25:0,而HADDR26:27对4个区进行寻址。如下表所示:FSMC在完成地址总线会自动在内部进行错位对齐处理,不需要考虑外部设备的位数,FSMC_A0都是接在外部设备地址A0。所以在选择外部设备为16位的存储器时,FSMC的一个地址对应两个字节,于是需要将内部地址总线AHB进行设置,即将其进行右移处理即可。STM32的FSMC各BANK配置寄存器如表:STM32的FSMC支持的异步突发访问模式包括:模式1、模
17、式A-D的多时序模型,驱动SRAM一般使用模式1或模式A,本设计中,使用模式A来驱动LCD。模式A的读操作时序如下图:模式A支持独立的读写时序控制,TFTLCD在读写时速度不一致,读的时候会比写的时候要慢,如果读写用一样的时序,那么只能以速度慢的时序为基准,也就是读的时序,从而导致写的速度变慢;还有一个办法就是在读时序完成后,重新对FSMC的延时进行配置,然后再进行写时序的操作,这样虽然能够同时对读写程序的各种配置来优化效率,但是需要进行多次配置,效率降低。如果有一套相应的读写时序的配置,能够在初始化的时候就已经对读写程序进行过相应的配置,在使用时,就可以大大减少对时序的配置,同时满足需求。模
18、式A的读操作时序如下图: 用FSMC模拟8080并口时序FSMC写NOR时序跟8080并口时序是很相似的,现进行对比。8080信号线与FSMC信号线的D15:0的存储器操作周期都是用来控制数据信号;其中8080信号线的D/CX用对数据和命令的选择,而FSMC信号线是用RS来进行的;8080信号线的CSX可以用来对应FSMC的NEX,表示片选信号的控制;8080信号线的WRX可以用来对应FSMC的NWR,表示片选信号的控制;8080信号线的RDX可以用来对应FSMC的NOE,表示片选信号的控制。将FSMC地址线中的A0连接8080的D/CX,当A0为低电平时。数据线D15:0的信号会被理解为IL
19、19341命令,若A0为高电平时,传送的信号会被理解为数据。当传送数据时,只需要将最低位为奇数的地址写入数据,此时的地址线A0会为高电平,反之,则可以读出命令。 FSMC的初始化初始化FSMC主要是初始化三个寄存器FSMC_BCRx,FSMC_BTRx,FSMC_BWTRx,完成4种类型存储器的初始化。主要分为两个部分:1) 读时序:通过 readWriteTiming.FSMC_AddressSetTime这条语句来地址设置地址建立时间。因为STM32的FSMC性能存在问题,高电平持续的时间为190ns,所以设置为1。通过readWriteTiming.FSMC_DataSetsupTime
20、来设置数据保存时间,最大为355ns,根据时钟周期,计算出设置为15。2) 写时序:通过writeTiming.FSMC_AddressSetTime这条语句的地址来建立数据保持时间。同理,设置为1。通过writeWriteTiming.FSMC_DataSetsupTime来设置数据保存时间,为50ns,根据时钟周期,计算出设置为3。重庆科技学院本科生毕业论文系统硬件设计3系统硬件设计3.1系统总体结构本设计采用的是基于Cortex-M3内核的STM32系列单片机。它具有处理器性能高、功率消耗低、性价比高等一系列特点,是现在的主流单片机。由于其简单的结构和强大的功能,使其应用较为广泛。STM
21、32F103VC自带256K字节的闪存程序存储器,并向外扩展SRAM,能够满足设计的需要。本设计是基于STM32来完成的,其中分为三个模块,分别是存储模块、通信模块以及显示模块。其框图如下:设计中需要用到按键来实现控制功能,需要选择引脚PA0和PA4.显示部分分三总线来传输,地址总线部分A0到A15分别接D0到D15, CS和RS接PG0和PG2,WR和RD分别接PD4和PD5。CAN通信的CS、RS分别与PB8和PB9相连HD7279 的CS、CLK、DATA、KEY 分别与STM32F103 的管脚PC0PC3连接。其原理图如下:3.3系统电源设计本仪表的大部分器件是+5V、+3.3V供电
22、的。由于设计中的供电环境是汽车,而汽车的蓄电池的电压为+12V,并且汽车在工作时会因为负载变化导致电压产生波动,因此要将电压模块进行电平转换,LCD模块的输入电平为3.3V,STM32的输出电平为5V,由于输入电平高于输出电平,LCD可正确接收到逻辑1。5V转3.3V原理图如下:3.5存储模块汽车仪表的一些参数信息需要存储,主要为车门状态显示图片及里程信息。可选用CPU内部FLASH存储和外部扩展EEPROM存储器。1) EEPOM可擦除次数较多,寿命长;擦除速度很快,但相对于RAM而言还是很长。选用的EEPROM芯片型号为24C02。该芯片的总容量为256个字节,该芯片通过IIC总线与外部连
23、接。IIC总线通过开始信号在传送数据过程中共有三种类型信号,分别为开始信号、结束信号和应答信号8。在数据保存中,可以将32位数据拆成2个16位保存,降低优化保存数据所带来的寿命问题。这些信号中,起始信号是必须的,结束信号和应答信号可以不要。2) FLASH存储器相较于EEPROM而言,能够快速的进行擦除读写,且价格低于EEPROM存储器。FLASH包括两个类型,即NOR FLASH和NAND FLASH。NOR FLASH以单个字读取,实现片上执行,在NOR FLASH中既可以保存程序,也能直接执行程序,不必再把代码读到系统RAM中。NOR FLSAH 通常用来存放固件系统启动代码、PC的BI
24、OS的不需要改写的小程序中。NAND FLSAH是以提供极高的单元密度,从而实现单个存储芯片的大容量。它主以读取页为单位,所以存放在NAND FLSAH中的应用程序布恩那个直接运行,需先读取到系统的RAM存储区域中,然后再执行。NAND FLASH常用于存储海量数据。根据需要存储的信息量,设计中选取NOR FLASH存储器进行存储。按照不同容量,存储器组织成32个1K字节/页(小容量)、128个1K字节/页(中容量)、256个2K字节/页(大容量)的主存储器块和一个信息块,其中选用的为16Kx 64位存储器,其模块组织如下:STM32的闪存模块由:主存储器、信息块和闪存存储器接口寄存器等3部分
25、组成。在信息块中,它的启动程序代码,是用来存储ST自带的启动程序,用于下载代码,而闪存存储器接口寄存器,主要用于控制闪存读写等,是整个闪存模块的控制机构。对主存储器和信息块的写入由内嵌的闪存编程/擦除控制器(FPEC)管理;编程与擦除的高电压由内部产生。在执行闪存写操作时,任何对闪存的读操作都会锁住总线,在写操作完成后读操作才能正确地进行;既在进行写或擦除操作时,不能进行代码或数据的读取操作。3.6LCD模块 LCD 作为汽车仪表的显示窗口,LCD模块主要显示车门状态和里程信息。常用的显示屏有液晶显示器(LCD)和有机电致发光显示器(OLED)。OLED相较于LCD而言,能够自发光,因此对比度
26、大,亮度好,同时造价较高,并且寿命短,在本设计中性价比较低.其中TFT-LCD相交于TN-LCD、STN-LCD而言,它在液晶显示屏的每个像素上都设置有一个薄膜晶体管(TFT),可以有效地克服非选通时的串扰,使显示液晶屏的静态特性与扫描线数无关,从而大大提到图像质量。综上比较,TFT-LCD目前在亮度、对比度、寿命、功耗等综合性能上有显著优势,因此作为本设计的显示设备。在显示品质方面,以分辨率划分,有220×176、320×240、640×480、800×600,设计中选用2.4寸320×240显示屏。原理图如下:由于显示图片时数据量比较大,相
27、较于8位的方式,LCD模块采用16位的并方式与外部相连,这样其速度能够快上一倍。其中,LCD模块与STM32的IO口有对应关系:LCD_BL对应PB0;LCD_CS对应PG12,LCD_RS对应PG0;LCD_WR对应PD5;LCD_RD对应PD4;LCD_D15:0直接连接FSMCD_0到FSMCD_15。重庆科技学院本科生毕业论文系统软件设计4 系统软件设计4.1软件模块划分由于设计采用的模块化思想,在实现功能时也将个功能通过模块化来划分,其中主要包括主程序模块以及功能模块。主程序模块主要用来调度各功能模块,而功能模块包括通信模块、显示模块以及存储模块。软件采用C语言来编写,这样能够具有良
28、好的移植性、通用性以及可靠性。通信模块主要选用CAN通信来实现。通过CAN总线发送及接受报文,实现数据传输。显示模块主要选用LCD来实现。主要显示汉字、图片两个部分。在显示汉字时,因为显示的内容比较少,如果选择调用基本库,会占用较多的内存,并且调用起来会很复杂,因此需要根据显示内容建立字库。4.2CAN通信模块系统实现仪表通信功能主要通过CAN总线发送与接收任务实现。通过CAN总线发送缓冲区读取报文并发送和接收缓冲区读取报文,根据J1939协议将数据解析为相应的测量值,保存到各个被检测对象对应的状态变量中或发送信号给对应的邮箱。 SAE J1939 通信协议SAE J1939 通信协议栈使汽车
29、电子产品的开发变得简捷、快速。所有在 SAE J1939 规范中定义的通讯装置都可用该软件来实现,从而使汽车电子产品开发者能够集中精力进行自己应用软件的开发。这种基于 OSI 层模型的协议软件具有标准组件的结构,这种结构最适于移植到特殊的目标系统。通过配置文件,SAE J1939 通信协议栈能够被精确地移植,完全适合特定应用的需要,因此要求这种通信协议栈完全由 C 源代码编写。所提供的源代码、文档、例子程序使用户能够很快地应用 SAE J1939 软件进行工作。所有的源代码、例子程序都能够在参考平台上直接运行。 1939 协议栈 1)数据链路层:CAN 控制芯片实现了几乎全部的数据链路层内容,
30、但 J1939对该层进行了一些修改,如对 ID 号重新进行了定义,J1939 只支持扩展帧模式9。2)传输层:根据 J1939 协议实现接收和发送报文的算法,有两种传输模式,分别是广播通讯(TP-BAM)和连接管理(TP-CM),都被J1939协议栈支持。 信号处理CAN数据提取完毕之后,通过协议的规定将数据解析出来。其中数据包括:数据类型、数据长度、数据范围和表示符。解析过程通过提取数据包的PGN(偏移号)根据J1939协议的规定进行。其中车门状态量信号选取J1939协议中的后两位2进制数表示,“00”为关闭,“01”打开。当数据帧发送的PGN码为65421时,则根据分组号来判断显示状态。流
31、程图如下: CAN软件实现本设计中,通过中断方式进行 CAN 总线的数据收发,CAN 总线的接口初始化和测试主要是由 CAN_ Configuration (void)函数来实现的。相关代码如下: 4. 3LCD显示程序设计 4.3.1TFTLCD的驱动一般的LCD的驱动流程都是一样的,主要分为硬复位、初始化以及读/写GRAM指令来完成。其流程图如下:由于选用的LCD的硬复位是与MCU连接的,这样直接通过MCU的复位引脚对LCD进行复位即可,同时,还能够节省一个IO口。如果在没有连接,则需要将RST接到MCU的IO上,在初始化之前,先拉低电平,延迟100ms之后再释放RST,完成对了LCD的硬
32、复位。LCD的初始化序列一般是厂家直接提供的,不同的厂家初始化的序列是不一样的。在LCD初始化时,只需要输入相应的ID就可以。在LCD初始化之前,还要对GPIO和FSMC初始化。4.3.2底层函数与结构LCD中的七个底层函数,分别为写寄存器值函数、读/写数据函数、写寄存器内容函数、读寄存器内容函数、开始写GRAM函数和写GRAM函数。其中写寄存器函数中通过对寄存器编号的选用,来选择FSMC的时序控制方式,此时的RS值为0。写数据函数通过对DATA的数据进行写入,实现数据的传输,此时的CS、WR以及IO都是直接由FSMC来进行控制,不需要进行选择,而RS的值此时为1。写寄存器内容函数可以由写寄存
33、器函数和写数据函数一起来代替,不过在使用写寄存器函数时需要先通过对寄存器编号的操作再进行寄存器值的写入。读寄存器内容函数主要通过返回值将内容进行传递。写GRAM函数主要通过对写颜色值来确定16位颜色数据的显示。其中LCD还有部分结构用来对LCD的信息进行设置。如LCD宽度(width)、高度(height)、驱动型号(id)、横竖屏(dir)。通过这些结构体来对显示信息进行划分,主要在函数LCD_DISPLY中来实现功能选择。4.3.3描点显示功能第一步是在屏幕上实现一个点的显示。首先是通过LCD_SETCURSOR函数来实现点的确认,即在画点功能,也就是通过对屏幕进行坐标的划分,确定一个点的
34、位置。然后再对屏幕的大小进行设置,确保所选的目标点不会超出屏幕的大小范围。函数中具体是通过先发送X和Y的高8位,再发送坐标的低8位。设置坐标以后,再对点的颜色进行确认,即写入GRAM指令。函数中主要通过LCD_DRAWPOINT来实现,选用设置一个全局变量,对点的颜色值进行选取。4.3.3字符串显示字符串的显示是通过先对一个字节的显示,然后进行循环对下一个字节的显示来实现的。主要函数为LCD_SHOWSTRING。确定了字符串的起始地址后,在显示下一个字符的时候,需要对下一个字符的起始坐标进行处理。显字符主要分为三个步骤。首先要对点阵进行选取,字符的显示是通过点阵集来实现的。显示字符是需要确定
35、一个字符对应点阵集的字节数。字符显示的内容需要与通过ASCII字库对应的模来进行选取,因为ASCII是从空格开始取模的,在确定对应关系上应该减去空格,从而保持对应关系。然后需要设置显示的参数信息,包括显示字体大小、显示方式。字体的大小主要可选12*12、16*16和24*24三种,设计中选用的是12*12的字体大小。在字节上,需要用两个字节来表示,第一个字节的高8位是有效的,第二个字节的高四位有效,而低四位无效。在显示方式上可以选叠加方式和不叠加方式两种最后选择显示的区域,即通过X、Y坐标确定显示的区域。4.3.3图片显示在选择图片时,需要考虑图片的格式问题。常见的图片格式有很多种,分别为:b
36、mp、png、jpd、gif等。设计中选用时需要考虑到的有图片的内存大小、分辨率、格式支持等方面。设计中用到的是jpd格式的图片,主要考虑的是显示的大小符合硬件支持,并且不需要对图片进行压缩处理,这样能够更为广泛的选择显示时图片所需要考虑到的扫描方式问题。使用图片时,需要考虑图片文件的数据结构,即图片中所包含的显示内容和类型。其中内容包括图像的宽度、高度和颜色信息等。在显示图片时,首先需要对图片进行解码。解码使用的是image2lcd软件,可以直接将图片解码然后生成.c文件。在文件生成后需要将其放入程序的源码文件image中,通过MD5将解码文件加入程序所在的工程中就可以了。对图片显示之前需要
37、对图像数据进行定义,即设定图片的扫描方式、灰度值、宽度、高度、以及颜色分量的排列顺序。扫描方式是通过定义中scan来选择,共8位。BIT1和BIT0中00表示水平扫描,数据水平,字节垂直;00表示水平扫描,01表示垂直扫描,10表示数据水平,字节垂直,11表示数据垂直,字节水平;BIT2和BIT3表示保留;BIT4中选0表示WORD类型高低位字节顺序与PC相同,选1表示WORD类型高低位字节顺序与PC相反;BIT5中选0表示字节内像素数据从高位到低位排列,选表示字节内像素数据从低位到高位排列;BIT6中选0表示自顶至底扫描,选1表示自底至顶扫描;BIT7中选0表示自左向右扫描,选1表示自右向左
38、扫描。灰度值在定义中通过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位数据的读操作都能访问闪存模块的内容
39、并得到相应的数据。读接口在闪存端包含一个读控制器,还包含一个AHB接口与CPU衔接。这个接口的主要工作是产生读闪存的控制信号并预取CPU要求的指令块,预取指令块仅用于在I-Code总线上的取指操作,数据常量是通过D-Code总线访问的。这两条总线的访问目标是相同的闪存模块,访问D-Code将比预取指令优先级高。这里要特别留意一个闪存等待时间,因为CPU运行速度比FLASH快得多,STM32F103的FLASH最快访问速度24Mhz,如果CPU频率超过这个速度,那么必须加入等待时间,使用STM32为72Mhz的主频,那么FLASH等待周期就必须设置为2,该设置通过FLASH_ACR寄存器设置。F
40、LASH编程流程图如下:在FLASH编程的时候,还需要判断缩写地址是否被擦除了。其中STM32的闪存擦除方式有两种:页擦除和整片擦除。其中页擦除流程图如下:在访问FLASH时,需要用到一下几个函数:锁定解锁函数:void FLASH_Unlock(void)。在对FLASH进行写操作前必须先解锁,解锁操作也就是必须在FLASH_KEYR寄存器写入特定的序列KEY1和KEY2,;同样的道理,在对FLASH写操作完成之后,我们要锁定FLASH,使用的库函数是:void FLASH_Lock(void)。2.写操作函数固件库提供了三个FLASH写函数:FLASH_Status FLASH_Progr
41、amWord(uint32_t Address, uint32_t Data);FLASH_Status FLASH_ProgramHalfWord(uint32_t Address, uint16_t Data);FLASH_Status FLASH_ProgramOptionByteData(uint32_t Address, uint8_t Data);其中FLASH_ProgramWord为32位字写入函数,其他分别为16位半字写入和用户选择字节写入函数。32位字节写入实际上是写入的两次16位数据,写完第一次后地址+2。3.擦除函数固件库提供三个FLASH擦除函数:FLASH_Stat
42、us FLASH_ErasePage(uint32_t Page_Address); 页擦除函数,根据页地址擦除特定的页数据。FLASH_Status FLASH_EraseAllPages(void); 擦除所有的页数据。FLASH_Status FLASH_EraseOptionBytes(void); 擦除用户选择字节数据。主要是用的函数是:FLASH_Status FLASH_GetStatus(void);返回值是通过枚举类型定义的:typedef enum FLASH_BUSY = 1,/忙FLASH_ERROR_PG,/编程错误FLASH_ERROR_WRP,/写保护错误FLASH_COMPL
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 娱乐行业客服岗位总结
- 2024年广东省东莞市公开招聘警务辅助人员辅警笔试自考题1卷含答案
- 2023年陕西省渭南市公开招聘警务辅助人员辅警笔试自考题2卷含答案
- 2023年福建省莆田市公开招聘警务辅助人员辅警笔试自考题2卷含答案
- 2021年四川省资阳市公开招聘警务辅助人员辅警笔试自考题2卷含答案
- 陕西省安康市(2024年-2025年小学六年级语文)部编版竞赛题((上下)学期)试卷及答案
- 2024年玻璃、陶瓷制品生产专用设备项目资金申请报告代可行性研究报告
- 2023年电子控制四轮驱动装置资金申请报告
- 广西北海市(2024年-2025年小学六年级语文)统编版小升初真题(下学期)试卷及答案
- 医疗器械生产环境保护
- 道路运输企业安全生产管理人员安全考核试题题库与答案
- 年终抖音运营述职报告
- 车间修缮合同模板
- 脑梗死患者的护理常规
- 2024年7月国家开放大学法律事务专科《法律咨询与调解》期末纸质考试试题及答案
- 护士条例解读
- 医务人员岗前培训课件
- SQE年终总结报告
- 检修工(题库)附答案
- 2025届高考语文一轮复习:小说情节结构之伏笔 练习题(含答案)
- 《化学实验室安全》课程教学大纲
评论
0/150
提交评论