基于STM32数码相框系统设计与实现软件毕业论文

上传人:xx****m 文档编号:69045326 上传时间:2022-04-05 格式:DOC 页数:65 大小:16.20MB
返回 下载 相关 举报
基于STM32数码相框系统设计与实现软件毕业论文_第1页
第1页 / 共65页
基于STM32数码相框系统设计与实现软件毕业论文_第2页
第2页 / 共65页
基于STM32数码相框系统设计与实现软件毕业论文_第3页
第3页 / 共65页
点击查看更多>>
资源描述
毕业设计报告(论文)题目:基于STM32的数码相框系统设计与实现(软件)所属系 电子工程系 专 业 自 动 化 62 / 65基于STM32的数码相框系统设计与实现(软件)摘 要本设计是一款基于嵌入式硬件平台的数码相框,主控芯片为基于ARM Cortex-M3核的STM32系列嵌入式处理器,本设计包含主控制器核心板、LCD液晶显示、SD卡存储器等多个功能模块。实现对SD卡里多幅图片以幻灯片形式在TFT屏上动态显示的效果,且带有实时时钟的功能。关键词:嵌入式;数码相框;Cortex-M3The design of digital photo frames based on the STM32AbstractThe design is a digital photo frame-based embedded hardware platform ,whose main chip for the STM32 family of embedded processors based on ARM Cortex-M3 core . The design includes a host controller core board, LCD display, SD card memory and other functional modules. It can achieve the effect of multiple images of the SD card as a slide show on the TFT screen dynamic display, and with real-time clock function.Keywords:Embedded; Digital Photo Frame; Cortex-M3目 录摘要IABSTRACTII第一章引言11.1 课题研究意义11.2 数码相框的发展情况和趋势11.2.1 数码相框的发展现状11.2.2 数码相框的发展趋势21.3 本课题设计主要研究容21.4 主要章节安排3第二章硬件介绍42.1 嵌入式系统概况42.1.1 嵌入式系统的定义42.1.2 嵌入式系统的组成42.1.3 嵌入式系统的特点52.2 数码相框模块52.2.1 MCU主控模块52.2.2 LCD模块62.2.3 SD存储卡模块9第三章编程环境介绍123.1 RVMDK3.80A简介123.2 新建RVMDK工程123.3 软件仿真193.4 在线调试243.4.1 J-link简介243.4.2 J-link调试步骤253.5 程序下载28第四章程序设计与调试344.1 系统描述344.2 软件设计344.2.1 文件读取344.2.2 图像解码与显示354.2.3 时钟显示424.2.4 主程序设计524.3 程序调试57第五章结束语59致60参考文献(REFERENCES)61附录数码相框原理图62第一章 引 言1.1 课题研究意义嵌入式系统无疑是当前最热门最有发展前途的IT应用领域之一。嵌入式系统用在一些专用设备上,通常这些设备的硬件资源(如处理器、存储器等)非常有限,并且对成本很敏感,有时对实时响应要求很高。特别是随着消费家电的智能化,嵌入式更显重要。像我们平常常见到的手机、PDA、电子字典、可视、VCDDVDMP3播放器、数码相机、数字摄像机、U-Disk、机顶盒、高清电视、游戏机、智能玩具、交换机、路由器、数控设备、汽车电子、家电控制系统、医疗仪器、航天航空设备等都是典型的嵌入式产品。数字摄影的兴起不可避免地引起了数码相框的发展,因为仅有不到35%的数码照片被打印出来。数码相框的基本原理就是采用普通相框的造型,把原来相框中间的照片部分换成液晶显示屏,配上电源,存储介质等,使得同一个相框可以循环播放照片,比普通照片的单一显示功能更有优势。从2007年开始,数码相框的市场关注度开始激增。在2008年,数码相框市场呈现高速发展的态势,本课题的研究具有极高的潜在市场价值。此外,本设计属于数字影音娱乐产品,需要较为强劲的处理器进行图像解码的工作,而STM32 具有超低的价格、超多的外设、丰富的型号、优异的实时性能、杰出的功耗控制和极低的开发成本等特点。因此,进行基于STM32平台的数码相框系统的设计具有重要的理论意义和实用价值。1.2 数码相框的发展情况和趋势1.2.1 数码相框的发展现状数码相框产品是2001年开始出现的,但由于当时消费者的接受度与价格过高的因素,使这一市场一直到2003年都很低迷。随着主要器件价格的下降,数码相框的价格也逐步下降,市场在2004年开始有了起色,尤其在2005年,数码相框产品开始在欧美热销,但出货量也只有150万台左右,到了2006年的出货量同比上涨133,为280万台,2007年的出货量同比上涨185,为800万台,预计到2011年出货量将达到4000万台。从屏幕尺寸来看,2006年5-6.9英寸产品占主流,2007年7、8、9英寸产品成为最大市场。预计2011年,7、8、9英寸产品的供货比例将持续保持首位,而平均销售单价将以每年16.5左右的速度降低。2006年以前,中国生产的数码相框绝大多数出口国外。2005年底Philips率先将数码相框在中国推广,在礼品市场上取得了一些成绩,但由于销售价格较高,约为2050元/台,这一年中国数码相框的销售量仅有1.7万台。2006年下半年,开始有更多的国厂商在中国市场推出数码相框,因而也带动了此产品价格的下降,这一年的平均售价为1150元/台,仍然较高,市场也以商务礼品为主,但由于2005年销售量的基数较低,2006年的销售量同比增长了470.6,达到9.7万台。直到2007年下半年,业界才感到这个一直处于培育期的市场,开始了真正的起飞。这得益于对数码相框产品认知度的提高、价格的下滑和需求量的提高。从IT厂商来看,仅2007年下半年以来,就有惠普、三星、优派、AOC、明基、柯达、长城等众多新军加入数码相框阵营。其中,巨头惠普2007年7月底在美国宣布进入数码相框市场,2007年数码相框出货量设定为50万台。除新军外,数码相框老牌劲旅的出货量表现也令业界振奋,如飞利浦2006年数码相框出货量达到50万台,而2007年上半年出货量已达去年总和,2007年全年出货量达150万台。而从上游面板厂商的动作来看,也显示出乐观的发展态势。中华映管、群创等厂商均显著调高了配套数码相框产品的中尺寸面板的出货量目标,2007年出货量达1000万台,预计2008年更将倍增至2000万台。其中,中华映管目前已调配一座4.5代面板厂来支持生产中尺寸面板,主要生产可携式DVD播放机面板与数码相框面板,其数码相框面板以7英寸、8英寸、10.2英寸为主要尺寸,数码相框面板占其中尺寸面板的比重提高到40。1.2.2 数码相框的发展趋势从长远来看,2008年与今后几年将为处在数码相框产品供应链的各企业带来巨大的商机。未来几年,数码相框的市场将处在逐渐走向成熟期的阶段,其产销量和市场需求依然将保持大幅度的增长,在未来的三年,市场尚无萎缩的可能。但数码相框拓展中国市场需克服两大难点:一是价格;二是拓展应用空间。价格下降是必然趋势,中国消费者接受只是时间的问题,而根据中国消费者的需求和特点,开发出相应的应用产品,则是需要数码相框厂商亟待解决的问题。从技术上来说,未来数码相框的发展将向两极分化。一部分产品着重强调基本功能和低成本,整合家庭中的闹钟、日历和装饰功能,这些产品走的是低成本路线,以展示照片为主,追求图像的品质与幻灯片播放特效,已成为DC/DV的附属物;另一部分产品将会添加一些新的功能,如WiFi,还可即时报告天气、股票等信息,从而有望成为“桌面信息中心”。此外,触摸面板会成为一个应用的新亮点。从产品形态上来说,数码相框的市场将会有非常明确的细分。1 数码相框:这将是以数字照片的重显为主要功能的产品,其功能更接近于传统意义上的相框。由于人机界面的限制,为了更方便的重显和浏览以与确定重显的规则,这类产品并不强调有大容量的存以与丰富的存储卡接口,这类产品的主要特征是:1) 支持USB Device&Host以便于更新和同步数据。2) 在某些情况下(如从PC端通过相框的USB Device同步数据),允许修改数字照片的格式使得有最佳的重显效果。3) 仅依靠置的半导体存储器存放需要重显的数字照片。4) 文件(照片)查询和播放规则设定非常简洁易用。5) 产品大致分为桌面和壁挂两种。2 数码相册:这是以数字照片的存储和浏览为主要功能的产品,由于需要满足跟PC相类似功能,所以这类产品的主要特征是:1) 有大容量的置数据存储器。2) 支持USB Device&Host与各种存储卡接口,并支持部存储器与各种数据存储器之间的同步以与相互拷贝。3) 强大的文件管理功能:浏览,搜寻,命名(重命名),复制,删除,备份等。4) 带或不带建显示单元,有能支持其它高分辨率显示设备的接口(如色差,VGA甚至是HDMI)。1.3 本课题设计主要研究容本课题是基于ARM单片机STM32F103RBT6的存储程序控制,从SD卡读取图片,解码后输出到TFT-LCD上显示,同时通过按键可以切换到时间模式。1)硬件电路原理图的绘制(见附录);2)硬件资料的研究;3)软件方案的选择与论证;4)软件运行与调试;1.4 主要章节安排第一章 就课题研究的背景与意义以与发展现状与趋势做出说明;第二章 概要性地介绍了嵌入式系统的基本知识;第三章 详细地介绍了软件编程与下载环境;第四章 程序设计与调试;第五章 结束语;致 在软件设计过程中给予我无限帮助的老师和同学;参考文献 列出本次设计中参阅的相关资料;附 录 在设计过程中所参考的部分资料与硬件装置的部分资料。第二章 硬件介绍2.1 嵌入式系统概况2.1.1 嵌入式系统的定义虽然嵌入式系统是近几年才风靡起来的,但其历史可追溯到20世纪70年代。经过30多年的发展,在硬件和软件交替发展的支撑下,嵌入式技术逐渐趋于稳定和成熟,已被广泛应用于工业控制、交通管理、信息家电、家庭智能管理系统、POS网络与电子商务、环境检测、机器人等各个领域。毫不夸的说,嵌入式系统已经无所不在,所以研究和开发嵌入式系统有着十分重要的意义。根据IEEE(国际电气和电子工程师协会)的定义,嵌入式系统是“控制、监视或辅助设备、机器和车间运行的装置”,这主要是从应用上加以定义的。不过,上述定义并不能充分体现出嵌入式系统的精髓。目前,国一个普遍被认同的定义是:以应用为中心、以计算机为基础,软、硬件可裁减,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。广义地讲,凡是不用于通用目的的可编程计算机设备,就可以算是嵌入式计算机系统。狭义上而言,嵌入式系统是指以应用为核心,以计算机技术为基础,软硬件可裁剪,适于应用系统对功能、可靠性、成本、体积和功耗严格要求的专用计算机系统。总的来说,嵌入式系统是一个外延极广的概念,凡是与产品结合在一起的、具有嵌入式系统特点的系统都可以称为嵌入式系统。可以从以下几个方面来理解嵌入式系统的含义:嵌入式系统是面向用户、面向产品、面向应用的,必须与具体应用相结合才会具有生命力。正因为与具体应用的紧密结合,嵌入式系统才具有很强的专用性。嵌入式系统将先进的半导体技术、计算机技术和电子技术,以与各个行业的具体应用相结合,是一个技术密集、资金密集、学科交叉和不断创新的知识集成系统。嵌入式系统必须根据应用需要对硬件和软件进行裁剪,以满足应用系统对功能、可靠性、成本、体积和功耗的要求。2.1.2 嵌入式系统的组成通常来说,嵌入式系统可以划分成硬件和软件两部分。嵌入式硬件由嵌入式微处理器、片周边电路和外部设备三部分组成。嵌入式微处理器是嵌入式硬件系统的核心,直接影响嵌入式产品的应用围和开发复杂度。典型的嵌入式微处理器有Motorola公司的Power PC系列、Intel公司的Strong Arm系列、AMD公司的X86系列以与EPSON公司的SIC33系列等。嵌入式软件一般由连接硬件和应用程序的嵌入式实时操作系统(Real-time operating System,简称RTOS)和在其上运行的应用软件构成。嵌入式处理器嵌入式处理器是嵌入式系统的核心部件,是控制、辅助系统运行的硬件单元,其功能和性能影响着整个系统的功能、性能和设计。嵌入式处理器的选择也制约着其配套的外围器件与操作系统的选择。嵌入式处理器的种类繁多、数量庞大。目前世界上嵌入式处理器的种类数量已经超过1000种,流行的体系结构有30多个系列。嵌入式微处理器具有体积小、重量轻、成本低、可靠性高等优点,因此得到了广泛应用。目前这样的嵌入式处理器类型有ARM、MIPS、MC6800、386EX、PowerPC等系列,其中以ARM的应用最为广泛。嵌入式处理器可以分为四类,即嵌入式微处理器(Embedded Microprocessor Unit,EMPU),如ARM嵌入式微控制器(Microcontroller Unit,MCU)嵌入式DSP处理器(Embedded Digital Signal Processor,EDSP)嵌入式片上系统(System On Chip)嵌入式外围设备这里所说的嵌入式外围设备,指在一个嵌入式硬件系统中,除了中心控制部件(MCU,DSP,EMPU,SOC)以外的完成存储、通信、保护、调试、显示等辅助功能的其他部件。根据外围设备的功能可分为以下三类,即:存储器类型:静态易失型存储器(RAM,SRAM)、动态存储器(DRAM)、非易失型存储器(ROM,EPROM,EEPROM,FLASH)。其中,因为FLASH可以擦写多次,存储速度快,容量大,价格便宜在嵌入式领域应用广泛。接口类型:目前存在的所有接口在嵌入式领域都应用广泛,如RS-232(串口)、IRDA(红外线接口)、SPI(串行外围设备接口)、I2C(现场总线接口)、USB(通用串行接口)、Ethernet(以太接口)和普通并口。显示类型:CRT,LCD和触摸屏等外围设备。2.1.3 嵌入式系统的特点嵌入式系统具有以下几个重要特征:系统核小,由于嵌入式系统一般应用于小型电子装置,系统资源相对有限,所以核较之传统的操作系统要小得多。比如,ENEA公司的OSE分布式系统,核只有5KB,而Windows的核则要大得多。专用性强,嵌入式系统的个性化很强,其中的软件系统和硬件结合非常紧密,一般要针对硬件进行系统的移植,同时针对不同的任务,往往需要对系统进行较大的更改。另外,程序的编译下载要和系统相结合。嵌入式系统一般没有系统软件和应用软件的明显区分,不要求其功能的设计与实现过于复杂,这样既利于控制系统成本,也利于实现系统安全。高实时性的操作系统软件是嵌入式软件的基本要求,而且软件要求固化存储,以提高速度,软件代码要求高质量和高可靠性。嵌入式软件开发要想走向标准化,就必须使用多任务操作系统。嵌入式系统的应用程序可以没有操作系统而直接在芯片上运行,但为了更合理的调度多任务,利用系统资源、系统函数,用户必须自行选配RTOS开发平台。执行的实时性、可靠性,并减少开发时间,保障软件质量。嵌入式系统开发需要专门的开发工具和环境。由于嵌入式系统本身不具备自主开发能力,即使完成设计后,用户通常也不能对其中的程序功能进行修改,因此必须有一套基于通用计算机的开发工具和环境才能进行开发。2.2 数码相框模块2.2.1 MCU主控模块STM32系列闪存微控制器是意法半导体公司(ST)基于ARM公司具有突破性的Cortex-M3核的处理器,该处理器是专门设计于满足集高性能、低功耗、实时应用、具有竞争性价格于一体的嵌入式领域的要求。此次设计采用的具体型号是STM32F103RBT6,如图2-1所示。图2-1 STM32F103RBT6处理器STM32F103RBT6嵌入式处理器具有以下特点:32位RISC性能处理器;32位ARM Cortex-M3结构优化;72 MHZ运行频率,单周期访问时速度可达1.25 DMIPS/MHz;硬件除法和单周期乘法;快速可嵌套中断,612个时钟周期;具有MPU保护设定访问规则;片具有256KB FLASH,48KB RAM;80个快速I/O端口,16个I/O可映射到外部中断,几乎所有的I/O可以忍受5V电压;片上集成12Bit A/D、D/A、PWM、CAN、USB、SDIO、FSMC等资源;ARM Cortex-M3是一种基于ARM7v架构的最新ARM嵌入式核,它采用哈佛结构,使用分离的指令和数据总线(诺伊曼结构下,数据和指令共用一条总线)。从本质上来说,哈佛结构在物理上更为复杂,但是处理速度明显加快。根据摩尔定理,复杂性并不是一件非常重要的事,而吞吐量的增加却极具价值。除了使用哈佛结构,Cortex-M3还具有其它显著的优点:具有更小的基础核,价格更低,速度更快。与核集成在一起的是一些系统外设,如中断控制器、总线矩阵、调试功能模块,而这些外设通常都是由芯片制造商增加的。Cortex-M3还集成了睡眠模式和可选的完整的八区域存储器保护单元,只支持最新的Thumb-2指令集,最大限度降低了汇编器使用率。Cortex-M3这样设计的优势在于:免去Thumb和ARM代码的互相切换,对于早期的处理器来说,这种状态切换会降低性能。Thumb-2指令集的设计是专门面向C语言的,且包括If/Then结构(预测接下来的四条语句的条件执行)、硬件除法以与本地位域操作。Thumb-2指令集允许用户在C代码层面维护和修改应用程序,C代码部分非常易于重用。Thumb-2指令集也包含了调用汇编代码的功能:Luminary公司认为没有必要使用任何汇编语言。综合以上这些优势,新产品的开发将更易于实现,上市时间也大为缩短。STM32F103RBT6的资源完全满足此次的嵌入式数码相框设计,通过设计电路开发一个支持TFT彩色液晶屏的驱动电路,在设计中搭配2.8寸TFT真彩触摸屏模块作为显示界面,同时支持一个SD卡(SPI方式)可用于存储图片、数据等。2.2.2 LCD模块Thin Film Transistor(薄膜场效应晶体管),是指液晶显示器上的每一液晶象素点都是由集成在其后的薄膜晶体管来驱动。从而可以做到高速度、高亮度、高对比度显示屏幕信息,TFT-LCD(薄膜晶体管液晶显示器)是多数液晶显示器的一种。TFT屏幕的优点如下:大面积。九十年代初第一代大面积玻璃基板(300mm400mm)TFT-LCD生产线投产,到2000年上半年玻璃基板的面积已经扩大到了680mm880mm),最近950mm1200mm的玻璃基板也将投入运行。高集成度。用于液晶投影的1.3英寸TFT芯片的分辨率为XGA含有百万个象素。分辨率为SXGA(12801024)的16.1英寸的TFT阵列非晶体硅的膜厚只有50nm,以与TAB ON GLASS和SYSTEM ON GLASS技术,其IC的集成度,对设备和供应技术的要求,技术难度都超过传统的LSI。功能强大。TFT最早作为矩阵选址电路改善了液晶的光阀特性。对于高分辨率显示器,通过0-6V围的电压调节(其典型值0.2到4V),实现了对象元的精确控制,从而使LCD实现高质量的高分辨率显示成为可能。TFT-LCD是人类历史上第一种在显示质量上超过CRT的平板显示器。现在人们开始把驱动IC集成到玻璃基板上,整个TFT的功能将更强大,这是传统的大规模半导体集成电路所无法比拟的。低成本。玻璃基板和塑料基板从根本上解决了大规模半导体集成电路的成本问题,为大规模半导体集成电路的应用开拓了广阔的应用空间。工艺灵活。除了采用溅射、CVD(化学气相沉积)MCVD(分子化学气相沉积)等传统工艺成膜以外,激光退火技术也开始应用,既可以制作非晶膜、多晶膜,也可以制造单晶膜。不仅可以制作硅膜,也可以制作其他的-族和-族半导体薄膜。应用领域广泛。以TFT技术为基础的液晶平板显示器是信息社会的支柱产业,技术可应用到正在迅速成长中的薄膜晶体管有机电致发光(TFT-OLED)平板显示器也在迅速的成长中。TFT液晶显示屏亮度好、对比度高、层次感强、颜色鲜艳,其广泛应用于手机、MP4等消费品。因此,本系统选用2.8英寸TFT-LCD屏(如图2-2所示)可显26万色,分辨率320*240,控制器为ILI9320,采用16位的80并口,配合触摸屏专用芯片XPT2046,可对屏幕进行触摸操作,更显智能化和个性化。为了方便用户使用,我们存储方式采用兼容FAT的文件系统,同时该文件系统也兼容FAT32等电脑主流的文件系统方式进行存储。图2-2 2.8英寸TFT-LCD模块该模块的80 并口有如下一些信号线:CS:TFT-LCD片选信号。WR:向TFT-LCD写入数据。RD:从TFT-LCD读取数据。D15:0:16位双向数据线。RST:硬复位TFT-LCD。RS:命令/数据标志(0,读写命令;1,读写数据)。TFT-LCD模块的RST 信号线是直接接到STM32 的复位脚上,并不由软件控制,这样可以省下来一个I/O口。另外我们还需要一个背光控制线来控制TFT-LCD的背光。所以我们总共需要的I/O口数目为21个。模块的控制器为ILI9320(可能为其他型号,但是他们的设置很相似,除了初始化序列有些区别,其他大都是一摸一样的,这里仅以9320为例介绍),该控制器自带显存,其显存总大小为172820(240*320*18/8),即18位模式(26万色)下的显存量。模块的16位数据线与显寸的对应关系为565方式,如下图所示:图2-3 16位数据与显存对应关系图最低5位代表蓝色,中间6位为绿色,最高5 位为红色。数值越大,表示该颜色越深。接下来介绍一下ILI9320的几个重要命令,因为ILI9320的命令很多,这里不一一介绍。这里我们要介绍的命令列表如下:表2.1 ILI9320 常用命令表R0,这个命令,有两个功能,如果对它写,则最低位为OSC,用于开启或关闭振荡器。而如果对它读操作,则返回的是控制器的型号。这个命令最大的功能就是通过读它可以得到控器的型号,而我们代码在知道了控制器的型号之后,可以针对不同型号的控制器,进行不同的初始化。因为93xx 系列的初始化,其实都比较类似,我们完全可以用一个代码兼容好几个控制器。R3,入口模式命令。我们重点关注的是I/D0、I/D1、AM 这3 个位,因为这3 个位控制了屏幕的显示方向。AM:控制GRAM更新方向。当AM=0的时候,地址以行方向更新。当AM=1的时候,地址以列方向更新。I/D1:0:当更新了一个数据之后,根据这两个位的设置来控制地址计数器自动增加/减少1,其关系如下图:图2-4 GRAM 显示方向设置图通过这几个位的设置,我们就可以控制屏幕的显示方向了。R7,显示控制命令。该命令CL位用来控制是8位彩色,还是26万色。为0时26万色,为1时八位色。D1、D0、BASEE这三个位用来控制显示开关与否的。当全部设置为1的时候开启显示,全0是关闭。我们一般通过该命令的设置来开启或关闭显示器,以降低功耗。R32,R33,设置GRAM的行地址和列地址。R32用于设置列地址(X 坐标,0239),R33用于设置行地址(Y坐标,0319)。当我们要在某个指定点写入一个颜色的时候,先通过这两个命令设置到改点,然后写入颜色值就可以了。R34,写数据到GRAM命令,当写入了这个命令之后,地址计数器才会自动的增加和减少。该命令是我们要介绍的这一组命令里面唯一的单个操作的命令,只需要写入该值就可以了,其他的都是要先写入命令编号,然后写入操作数。R80R83,行列GRAM 地址位置设置。这几个命令用于设定显示区域的大小,我们整个屏的大小为240*320,但是有时候我们只需要在其中的一部分区域写入数据,如果用先写坐标,后写数据这样的方式来实现,则速度大打折扣。此时我们就可以通过这几个命令,在其中开辟一个区域,然后不停的丢数据,地址计数器就会根据R3的设置自动增加/减少,这样就不需要频繁的写地址了,大大提高了刷新的速度。通过以上介绍,我们可以得出TFT-LCD显示需要的相关设置步骤如下:1)设置STM32与TFT-LCD模块相连接的I/O。这一步,先将我们与TFT-LCD模块相连的I/O口设置为输出,具体使用哪些I/O口,这里需要根据连接电路以与TFT-LCD模块的设置来确定。2)初始化TFT-LCD模块。通过向TFT-LCD写入一系列的设置,来启动TFT-LCD的显示。为后续显示字符和数字做准备。3)通过函数将字符和数字显示到TFT-LCD模块上。这里就是通过我们设计的程序,将要显示的字符送到TFT-LCD模块就可以了,这些函数将在软件设计部分向大家介绍。通过以上三步,我们就可以使用TFT-LCD模块来显示字符和数字了,并且可以显示各种颜色的背景。2.2.3 SD存储卡模块SD卡(Secure Digital Memory Card)中文翻译为安全数码卡,是一种基于半导体快闪记忆器的新一代记忆设备,它被广泛地应用于便携式装置上,例如数码相机、个人数码助理(PDA)和多媒体播放器等。SD卡由日本松下、东芝与美国SanDisk公司于1999年8月共同开发研制。大小犹如一邮票的SD记忆卡,重量只有2克,但却拥有高记忆容量、快速数据传输率、极大的移动灵活性以与很好的安全性,此外它可存多种格式数据文件,具有很强的可扩展性;用户可方便使用SD卡读卡器对其进行用户信息修改。2G金士顿SD卡实物如下图2-5所示。SD卡一般支持两种操作模式:SD卡模式与SPI模式。主机可以选择以上任意一种模式同SD卡通信,SD卡模式允许4线的高速数据传输。SPI模式允许简单的通过SPI接口来和SD卡通信,这种模式同SD卡模式相比就是丧失了速度。SD卡的引脚排序如下图2-6所示: 图2-5 Kingston SD卡 图2-6 SD卡引脚排序图SD 卡引脚功能描述如下表所示:表2.2 SD卡引脚功能表SD卡只能使用3.3V的I/O电平,所以,MCU一定要能够支持3.3V的I/O端口输出。在SPI 模式下,CS/MOSI/MISO/CLK都需要加10100K左右的上拉电阻。SD卡要进入SPI模式很简单,就是在SD卡收到复位命令(CMD0)时,CS为有效电平(低电平)则SPI模式被启用。不过在发送CMD0之前,要发送74个时钟,这是因为SD卡部有个供电电压上升时间,大概为64个CLK,剩下的10个CLK用于SD卡同步,之后才能开始CMD0的操作,在卡初始化的时候,CLK时钟最大不能超过400KHZ。本次硬件电路板使用的是SPI模式来读写SD卡,下面我们就重点介绍一下SD卡在SPI模式下的相关操作。SPI模式下几个重要的操作命令,如下表所示:表2.3 SPI模式下SD卡部分操作指令其中 R1 的回应格式如下表所示:表2.4 SD卡R1回应格式SD卡的典型初始化过程如下:1、初始化与SD卡连接的硬件条件(MCU的SPI配置,I/O口配置);2、上电延时(74个CLK);3、复位卡(CMD0);4、激活卡,部初始化并获取卡类型(CMD1(用于MMC卡)、CMD55、CMD41);5、查询OCR,获取供电状况(CMD58);6、是否使用CRC(CMD59);7、设置读写块数据长度(CMD16);8、读取CSD,获取存储卡的其他信息(CMD9);9、发送8CLK后,禁止片选;这样我们就完成了对SD卡的初始化,这里面我们一般设置读写块数据长度为512个字节,并禁止使用CRC。在完成了初始化之后,就可以开始读写数据了。SD 卡读取数据,这里通过CMD17来实现,具体过程如下:1、发送CMD17;2、接收卡响应R1;3、接收数据起始令牌0XFE;4、接收数据;5、接收2 个字节的CRC,如果没有开启CRC,这两个字节在读取后可以丢掉;6、8CLK 之后禁止片选;以上就是一个典型的读取SD卡数据过程,SD卡的写与读数据差不多,写数据通过CMD24 来实现,具体过程如下:1、发送CMD24;2、接收卡响应R1;3、发送写数据起始令牌0XFE;4、发送数据;5、发送2字节的伪CRC;6、8CLK之后禁止片选;第三章 编程环境介绍3.1 RVMDK3.80A简介RVMDK源自德国的KEIL公司,是RealView MDK的简称,在全球RVMDK被超过10万的嵌入式开发工程师使用。RealView MDK集成了业最领先的技术,包括Vision3集成开发环境与RealView编译器。支持ARM7、ARM9和最新的Cortex-M3核处理器,自动配置启动代码,集成Flash烧写模块,强大的Simulation设备模拟,性能分析等功能。与ARM之前的工具包ADS1.2相比,RealView编译器具有代码更小、性能更高的优点。RealView编译器与ADS1.2的比较:代码密度方面比ADS1.2编译的代码尺寸小10%;代码性能方面比ADS1.2编译的代码性能提高20%。现在RealView的最新版本是RVMDK4.13A,4.0以上版本的RVMDK对IDE界面进行了很大改变,并且支持Cortex-M0核的处理器。虽然4.10界面确实是好了,支持的器件也多了,但编译效率没有3.24/3.80A高,尤其是编译后的代码执行速度(FFT运算),4.10要对速度进行-O2优化才能和3.24/3.80A的普通级别相比。另外,国大多数单片机工程师都接触和使用过KEIL,相信大家都知道KEIL的使用是非常简单的,而且很容易入手。基于以上几点,此次选择RVMDK3.80版本的编译器来对软件进行编译。3.2新建RVMDK工程首先,打开 MDK(以下简称RVMDK 为MDK)软件,再点击Project-New uVision Project菜单项,则弹出如图3-1所示界面:图3-1 保存工程界面新建一个文件夹 TEST,然后把工程名字设为test,点击“保存”按钮,弹出选择器件的对话框,因为我们的开发板使用的是STM32F103RBT6,所以在这里我们选择STMicroelectronics下面的STM32F103RB(如果使用的是其他系列的芯片,选择相应的型号就可以了)。如图3-2所示:图3-2 器件选择界面点击OK,MDK会弹出一个对话框,问你是否加载启动代码到当前工程下面,这里我们选择是。如图3-3所示: 图3-3 提示界面启动代码是一段和硬件相关的汇编代码,是必不可少的!这段代码的具体作用如下:堆栈的初始化;向量表定义;地址重映射与中断向量表的转移;设置系统时钟频率;中断寄存器的初始化。在上面点击了是以后,MDK就把启动代码STM32F10x.s加入到了我们的工程下面。到这里,我们就可以开始编写自己的代码了。由于上面我们还没有任何代码在工程里面,我们在TEST 目录下新建一个新文件夹USER,这里我们把系统代码复制过来(整个SYSTEM文件夹,这些代码在任何STM32F103的芯片上都是通用的,可以用于快速构建自己的工程,后面会有详细介绍)。之后,TEST文件夹下的文件如图3-4所示:图3-4 TEST文件夹最终摸样然后我们在 USER 文件夹下面找到test.Uv2,打开它,然后在Target目录树上右键-ManageComponents。如图3-5所示:图3-5 调出Manage Components在进入Manage Components界面之后,弹出如下对话框:图3-6 Components 选项卡在上面对话框的中间栏,点新建(用红圈标出)按钮(也可以通过双击下面的空白处实现),新建USER 和SYSTEM两个组,然后点击Add Files按钮,把sys.c,usart.c,delay.c加入到SYSTEM组中。此时USER组下还是没有任何文件的,得到如下图所示的界面:图3-7 修改结果点击OK,退出该界面返回IDE。这时,我们在Target树下发现多了2个组名,就是我们刚刚新建的2个组。如下图所示:图3-8在编辑状态下的体现接着,我们新建一个test.c文件,并保存在USER目录下,然后双击USER组,会弹出加载文件的对话框,此时我们在USER目录下选择test.c文件,加入到USER组下。得到如下界面:图3-9 在USER 组下加入test.c 文件接着我们在 test.c文件里面输入如下代码:#include sys.h#include delay.h#include usart.hint main(void)u8 t=0;Stm32_Clock_Init(9); /72Mdelay_init(72); /延时初始化uart_init(72,9600); /设置串口1 波特率while(1)printf(t:%dn,t);delay_ms(500);t+;点击(部分编译按钮)编译一下,会在Output Windows信息栏中发现如下报错信息:test.c(1): error: #5:cannot open source input file sys.h: No such file or directory。如下图所示(图中红圈信息):图3-10编译报错意思是无法打开源输入文件sys.h,没这个文件或目录。双击红圈的容,你会发现在test.c的01行出现了一个浅绿色的小箭头,说明错误是这个地方产生的。双击后浅绿色箭头出现位置如下:图3-11编译报错其实通过下面错误的说明,就是include 的路径没有加进去的缘故,而导致了这个错误。现在我们点击(Options for Target 按钮),弹出Options for TargetTarget 1对话框,选择C/C+选项卡,如下图所示:图3-12 加入头文件包含路径在Include Paths处,点击2处的按钮。在弹出的对话框中加入SYSTEM文件夹下的3个文件夹名字,把这几个路径都加进去(此操作即设定编译器的头文件包含路径,下面会经常用到)。图3-13 头文件包含路径设置点击OK确认,回到IDE,此时再点击按钮,再编译一次,发现没错误了,得到如下界面:图3-14 再次编译结果至此,一个完整的STM32开发工程在MDK下建立了,接下来我们就是进行软件仿真了。3.3软件仿真MDK的一个强大的功能就是提供软件仿真,通过软件仿真,我们可以发现很多将要出现的问题,避免了下载到STM32里面来查这些错误,这样最大的好处是能很方便的检查程序存在的问题,因为在MDK的仿真下面,你可以查看很多硬件相关的寄存器,通过观察这些寄存器,你可以知道代码是不是真正有效。另外一个优点是不必频繁的刷机,从而延长了STM32的FLASH寿命。当然,软件仿真不是万能的,很多问题还是要到在线调试才能发现。接下来我们开始进行软件仿真。在软件仿真之前,先检查一下配置是不是正确,点击,确定Target选项卡容如下所示(主要检查芯片型号和晶振频率,其他的一般默认就可以):图3-15 Target 选项卡确认了芯片以与外部晶振频率(8.0M)之后,基本上就确定了硬件环境了,接下来,我们再看Debug选项卡,设置为如下图所示的设置:图3-16 Debug 选项卡主要确认是Use Simulator是否选择(因为如果选择右边的Use,那就是用ULINK进行硬件Debug了,这个将在下面介绍),其他的采用默认的就可以。确认了这项之后,我们便可以选择OK,退出Options for Target对话框了。接下来,我们点击(开始/停止仿真按钮),开始仿真,出现如下界面:图3-17开始仿真可以发现,多出了一个工具条,这个工具条对于我们仿真是非常有用的,下面简单介绍一下工具条相关按钮的功能,工具条部分按钮的功能如下图所示图3-18 仿真工具条复位:其功能等同于硬件上按复位按钮。相当于实现了一次硬复位。代码重新执行。执行到断点处:该按钮用来快速执行到断点处,有时候你并不需要观看每步是怎么执行的,而是想快速的执行到程序的某个地方看结果,这个按钮就可以实现这样的功能。挂起:此按钮在程序一直执行的时候会变为有效,通过按该按钮,就可以使程序停止下来,进入到单步调试状态。执行进去:该按钮用来实现执行到某个函数里面去的功能,在没有函数的情况下,是等同于执行过去按钮的。执行过去:在碰到有函数的地方,通过该按钮就可以单步执行过这个函数,而不进入这个函数单步执行。执行出去:该按钮是在进入了函数单步调试的时候,有时候你可能不必再执行该函数的剩余部分了,通过该按钮就直接一步执行完函数余下的部分,并跳出函数,回到函数被调用的位置。执行到光标处:该按钮可以迅速的使程序运行到光标处,其实是挺像执行到断点处按钮功能,但是两者是有区别的,断点可以有多个,但是光标所在处只有一个。汇编窗口:通过该按钮,就可以查看汇编代码,这对分析程序很有用。观看变量/堆栈窗口:该按钮按下,会弹出一个显示变量的窗口,在里面可以查看各种你想要看的变量值,也是很常用的一个调试窗口。串口打印窗口:该按钮按下,会弹出一个串口调试助手界面的窗口,用来显示从串口打印出来的容。存查看窗口:该按钮按下,会弹出一个存查看窗口,可以在里面输入你要查看的存地址,然后观察这一片存的变化情况,是很常用的一个调试窗口性能分析窗口:按下该按钮,会弹出一个观看各个函数执行时间和所占百分比的窗口,用来分析函数的性能是比较有用的。逻辑分析窗口:按下该按钮会弹出一个逻辑分析窗口,通过 SETUP 按钮新建一些I/O 口,就可以观察这些I/O 口的电平变化情况,以多种形式显示出来,比较直观。其他几个按钮用的比较少,以上是比较常用的,当然也不是每次都用得着这么多,具体看你程序调试的时候有没有必要观看这些东西来决定要不要看。这样,我们在上面的仿真界面里面选存查看窗口、串口打印窗口。然后调节一下这两个窗口的位置,如下图所示:图3-19 调出仿真串口打印窗口我们把光标放到 test.c的09行,然后双击鼠标左键,可以看到在09行的右边出现了一个红框,即表示设置了一个断点(也可以通过鼠标右键弹出菜单来加入,再次双击则取消)。然后我们点击,执行到断点处,如下图所示:图3-20 执行到断点处我们不忙着往下执行,现在来点击菜单栏的Peripherals-USARTs-USART1。可以看到,有很多外设可以查看,这里我们查看的是串口1的情况。如下图所示图3-21 查看串口1 相关寄存器单击 USART1后会在IDE之外出现一个如下界面:图3-22 串口1 各寄存器初始化前后对比左边这个就是STM32默认时候,串口1的状态,从中可以看到所有与串口相关的寄存器全部在这上面表示出来了,而且有当前串口的波特率等信息的显示。我们接着单击一下,执行完串口初始化函数,得到了如上面右边图片所示的串口信息。你可以对比一下这两个的区别,就知道在uart_init(72,9600);这个函数里面大概执行了哪些操作。这样可以很清楚的告诉你,当前的串口是否可用,你的设置是否正确,同样这样的方法也可以适用于很多其他外设。然后我们继续单击按钮,一步步执行,最后就会看到在USART #1 中打印出相关的信息,如下图所示:图3-23 串口1输出信息这样证明我们的仿真是通过的,代码运行会在串口1 不停的输出t 的值,每0.5s执行一次(时间可以通过IDE的最下面观看到),并且t 自增。与我们预期的目地是一致的。再次按下结束仿真。至此,我们软件仿真算是结束了,接下来我们下载代码到硬件上来真正验证一下我们的代码是否可行。3.4 在线调试利用串口,我们只能下载程序,并不能实时跟踪,而利用调试工具,比如JLINK、ULINK等就可以实时跟踪程序,使你的开发事半功倍。这里我们以JLINK V8为例,说说如何在线调试。3.4.1 J-link简介J-Link是SEGGER公司为支持仿真ARM核芯片推出的JTAG仿真器。配合IAR EWAR,ADS,KEIL,WINARM,Real View等集成开发环境支持所有ARM7/ARM9/ARM11核芯片的仿真,通过RDI接口和各集成开发环境无缝连接,操作方便、连接方便、简单易学,是学习开发ARM最好最实用的开发工具。J-LINK仿真器V8版,其仿真速度和功能远非简易的并口WIGGLER调试器可比。J-LINK支持ARM7、ARM9、ARM11、Cortex-M3核心,支持ADS、IAR、KEIL开发环境。V8.0版本除拥有上一版本V7.0的全部功能外,软硬件上都有改进:(1)V8.0版的SWD硬件接口支持1.2-5.0V的目标板,V7.0只能支持3.3V的目标板。(2)V8.0使用双色LED可以指示更多的工作状态,V7.0只有1个LED指示灯。(3)V8.0增强了JTAG驱动能力,提高了目标板的兼容性。(4)优化了固件结构,使应用程序区扩大。J-Link ARM主要特点: IAR EWARM集成开发环境无缝连接的JTAG仿真器。 支持所有ARM7/ARM9核的芯片,以与Cortex-M3,包括Thumb模式。 支持ADS,IAR,KEIL,WINARM,REALVIEW等几乎所有的开发环境。 下载速度高达ARM7:600kB/s,ARM9:550kB/s,通过DCC最高可达800 KB/s。最高JTAG速度12MHz。 目标板电压围1.2V3.3V,5V兼容。 自动速度识别功能。 监测所有JTAG信号和目标板电压。完全即插即用。使用USB电源(但不对目标板供电)带USB连接线和20芯扁平电缆。支持多JTAG器件串行连接。标准20芯JTAG仿真插头。选配14芯JTAG仿真插头。选配用于5V目标板的适配器。带J-Link TCP/IP server,允许通过TCP/ IP网络使用J-Link。3.4.2 J-link调试步骤JLINK-V8支持JTAG和SWD,而STM32也支持JTAG和SWD。所以,我们有2种方式可以用来调试,JTAG调试的时候,占用的I/O 线比较多,而SWD 调试的时候占用的I/O线很少,只需要2跟即可。在安装了JLINK V8之后,我们接上JLINK-V8,并把JTAG口插到硬件板上,打开之前新建的工程,点击,打开Optionsfor Target选项卡,在Debug栏选择仿真工具为Cortex-M3 J-LINK,如下图所示图3-24 Debug 选项卡设置然后我们点击Settings,设置J-LINK的一些参数,如下图所示:图3-25 J-LINK 模式设置上图中,我们使用J-LINK V8的SW模式调试,因为我们JTAG需要占用比SW模式多很多的I/O口,而在硬件板上这些I/O口都是非常有用的,并造成部分外设无法使用。所以建议大家在调试的时候,一定要选择SW模式。Max Clock,可以点击Auto Clk来自动设置,这里设置JLINK的调试速度为10MHZ,如果USB数据线比较差,那么可能会出问题,此时,可以通过降低这里的速率来试试。单击OK,完成此部分设置,接下来我们还需要在Utilities选项卡里面设置下载时的目标编程器,如下图所示:图3-26 FLASH 编程器选择上图中,我们选择J-LINK来调试Cortex-M3,然后点击Settings,设置如下图所示:图3-27 编程设置这里要根据不同的MCU选择FLASH的大小,因为我们开发板使用的是STM32F103RBT6,其FLASH大小为128K,所以我们在Programming Algorithm里面选择128K型号的STM32。然后选中Reset and Run,以实现在编程后自动启动。其他默认设置即可。在设置完之后,点击OK,然后再点击OK,回到IDE界面,编译一下工程。再点击,开始仿真(如果开发板的代码没被更新过,则会先更新代码,再仿真,你也可以通过按,只下载代码,而不进入仿真,特别注意:开发板上的B0要设置到GND,否则代码下载后不会自动运行的!),如下图所示:图3-28 开始仿真可以看到都是一些汇编码的查看,如果我们要快速运行到main函数,可以在main函数的第一句语句处放入断点,然后点击,来快速执行到该处。如下图所示:图3-29 程序运行到断点处接下来,我们就可以和软件仿真一样的开始仿真了,不过这是真正的在硬件上的仿真,其结果更可信。3.5 程序下载STM32的程序下载有多种方法:USB、串口、JTAG、SWD等,这几种方式都可以用来给STM32下载代码。不过,我们最常用的,最经济的,就是通过串口给STM32下载代码。STM32的串口下载一般是通过串口1 下载的,本设计的硬件板,不是通过RS232串口下载的,而是通过自带的USB串口来下载。看起来像是USB下载(只有一根USB线,并没有串口线)的,实际上,是通过USB转成串口,然后再下载的。下面,我们就一步步实现如何在实验平台上利用USB串口来下载代码。首先要在板子上设置一下,在板子上把RXD和PA9(STM32的TXD),TXD和PA10(STM32的RXD)通过跳线帽连接起来,这样我们就把PL2303和MCU的串口1连接上了。这里由于硬件板自带了一键下载电路,所以并不需要去关心BOOT0和BOOT1的状态,但是为了让下载完后可以按复位执行程序,要把BOOT1和BOOT0都设置为0。设置完成如下图所示:图3-30 开发板串口下载跳线设置接着我们在USB_232处插入USB线,并接上电脑,如果之前没有安装PL2303的驱动(如果已经安装过了驱动,则应该能在设备管理器里面看到USB 串口,如果不能则要先卸载之前的驱动,卸载完后重启电脑(必要步骤),再重新安装我们提供的驱动),则电脑会提示找到新硬件,如下图所示:图3-31 找到新硬件我们不理会这个提示,直接找到光盘-软件文件夹下的PL-2303驱动,安装该驱动。在驱动安装完成之后,拔掉USB线,然后重新插入电脑,此时电脑就会自动给其安装驱动了。在安装完成之后,可以在电脑的设备管理器里面找到USB串口(如果
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!