




已阅读5页,还剩33页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 基于基于STM32STM32的数码相框设计与实现的数码相框设计与实现 摘 要 嵌入式系统是当前最有发展前途的 IT 应用领域之一,近年来数字摄影业的兴 起带动了嵌入式产品数码相框的发展。本设计是一款基于 ARM Cortex-M3 内 核 STM32 嵌入式硬件平台设计的数码相框,主要优势是应用了 Stm32 杰出的功耗 控制和极低的开发成本、超多的外设等特点。 设计主要包括主控制器核心板、LCD 液晶显示、SD 卡存储器等多个功能模块。 开发过程大致为:在 PC 机 win7 系统中使用 RVMDK3.80 版本的编译器撰写工程代 码,之后通过 mcuisp 串口下载软件将编译器编译生成.hex 下载到开发板内,最终实 现通过 FAT 文件系统读取 SD 卡内存储的 BMP、JPEG、JPG 格式图片,把多幅图 片以幻灯片的形式从 TFT 屏上显示出来。 关键词:数码相框; STM 32; LCD 液晶显示; SD 卡 全套设计加扣 3012250582 2 The design of digital photo frames based on the STM32 Abstract Embedded systems is one of the most promising applications of IT in recent years, driven by the rise of digital photography embedded products - digital photo frame development. The design is based on a STM32 ARM Cortex-M3 core embedded hardware platform design digital photo frame, both of todays digital photo frame industry, market demand and Stm32 excellent power control and low development costs. Core design includes the main controller board, LCD liquid crystal display, a number of functional modules SD card memory. Development process is roughly: Use RVMDK3.80 version of the compiler writing project code in the PC win7 system, after passing through mcuisp serial download software compiler to generate hex downloaded to the development board, and ultimately the system by reading the FAT file system. within the SD card storage BMP, JPEG, JPG format images, the pieces of the picture in the form of a slide from the TFT screen is displayed. Keywords: Digital Photo Frame; STM32;LCD liquid crystal display ;SD card memory. 目目 录录 摘要.1 ABSTRACT.2 目 录.1 第一章 绪论.1 1.1 数码相框的技术背景.1 1.2 数码相框的市场背景.1 1.3 本课题主要研究内容与特点.1 1.3.1 本课题的主要研究内容.1 1.3.2 本设计的主要特点.1 第二章 硬件介绍.3 2.1 MCU 主控模块 .3 2.2 LCD 模块.4 2.3 SD 存储卡模块 .7 第三章 软件介绍.10 3.1 安装 MDK3.8A.10 3.2 注册 LICENSE.10 3.3 新建工程.12 3.4 MCUISP与SSCOM软件 .18 第四章 程序设计.20 4.1 整体描述.20 4.2 各模块描述.20 4.2.1 SD 卡图片文件读取.20 4.2.2 图像解码与显示.21 4.3 主程序设计.28 4.3 程序调试.31 第五章 结束语.33 参考文献(REFERENCES).34 致 谢.35 外文文献.36 外文译文.45 1 第一章第一章 绪论绪论 1.11.1 数码相框的技术背景数码相框的技术背景 嵌入式是以应用为中心,以计算机技术为基础,软件硬件可裁剪适合于应用系 统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。 作为如今最有发展前途的 IT 应用领域之一嵌入式系统一般用在一些专用设备上, 通常这些设备的硬件资源非常有限、对成本很敏感,有时对实时响应要求很高。像 我们平常常见到的手机、VCD、MP3 播放器、数字摄像机、机顶盒、高清电视、游 戏机、路由器、汽车电子、家电控制系统、医疗仪器、航天航空设备等等都是嵌入 式产品。 随着数字摄影的兴起数码相框产业得以发展。数码相框的造型是将原来相框中 间放照片的部分换成了液晶显示屏,外加电源,存储介质等,比普通相框的优势是 在同一个相框内可以循环播放照片。 1.21.2 数码相框的市场背景数码相框的市场背景 市场方面,自 2008 年开始数码相框市场就呈现出了高速发展的态势,并一直 持续至今,因此本课题的研究具有极高的商业价值与意义。 数码相框产品的首次出现是在 2001 年,但直至 2003 年市场都一直低迷,其原 因在于产品的价格过高。之后在器件价格的下降等因素的促使下,其价格也得以下 降,于是市场自 2004 年有了起色,2005 年,数码相框产品开始在欧美热销,但出 货量也只有 150 万台左右, 2006 年的出货量同比上涨 133,为 280 万台,2007 年的出货量同比上涨 185,为 800 万台, 2011 年出货量达到 4000 万台。 从长远来看,未来几年数码相框的市场将逐渐步入成熟期,其产销量和市场需 求仍会保持大幅度增长。 1.31.3 本课题主要研究内容本课题主要研究内容与特点与特点 1.3.11.3.1 本课题的主要研究内容本课题的主要研究内容 本课题是基于 ARM 单片机 STM32 的存储程序控制,从 SD 卡读取图片,解码之 后输出到 TFT-LCD(薄膜晶体管液晶显示器)上显示。实现了对 SD 卡里多幅图片 以幻灯片形式在 TFT 屏上动态显示的效果。 1)硬件资料的研究; 2)软件方案的选择与论证; 3)软件运行与调试; 1.3.21.3.2 本设计的主要特点本设计的主要特点 从以往的市场发展来看,数码相框产品市场化的两大阻碍因素为:一是价格;二 是应用功能。低廉的价格将赢得更多顾客的青睐,拓展应用空间指的是消费者的需 求开发出相应的应用产品。 STM32 具有超低的价格、超多的外设、丰富的型号、优异的实时性能、杰出 的功耗控制和极低的开发成本等 超低的价格:以 8 位机的价格,得到 32 位机,是 STM32 最大的优势。 极低的开发成本:STM32 的开发不需要昂贵的仿真器,只需要一个串口即可下 载代码,并且支持 SWD 和 JTAG 两种调试口。SWD 调试可以为您的设计带来跟多 的方便,只需要 2 个 IO 口,即可实现仿真调试。 2 超多的外设:STM32 拥有包括: FSMC、TIMER、SPI、IIC、USB、CAN、IIS、SDIO、ADC、DAC、RTC、DMA 等众多外设及功能,具有极高的集成度。 丰富的型号:STM32 拥有 F101、F102、F103、F105、F107 等 5 个系列数十种 型号,具有 QFN、LQFP、BGA 等封装可供选择。 优异的实时性能:84 个中断,16 级可编程优先级,并且所有的引脚都可以作 为中断输入。 杰出的功耗控制:STM32 各个外设都有自己的独立时钟开关,可以通过关闭相 应外设的时钟来降低功耗。 3 第二章第二章 硬件介绍硬件介绍 2.12.1 MCUMCU 主控模块主控模块 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 代码的互相切换,对于早期的处理器来说,这种状态切换 4 会降低性能。 Thumb-2 指令集的设计是专门面向 C 语言的,且包括 If/Then 结构(预测接下来 的四条语句的条件执行)、硬件除法以及本地位域操作。 Thumb-2 指令集允许用户在 C 代码层面维护和修改应用程序,C 代码部分非常 易于重用。 Thumb-2 指令集也包含了调用汇编代码的功能:Luminary 公司认为没有必要使 用任何汇编语言。 综合以上这些优势,新产品的开发将更易于实现,上市时间也大为缩短。 STM32F103RBT6 的资源完全满足此次的嵌入式数码相框设计,通过设计电路开发 一个支持 TFT 彩色液晶屏的驱动电路,在设计中搭配 2.8 寸 TFT 真彩触摸屏模块作 为显示界面,同时支持一个 SD 卡(SPI 方式)可用于存储图片、数据等。 2.22.2 LCDLCD 模块模块 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,可对屏幕进行触摸操作,更显智能化和个性化。为了方便用户使用, 5 我们存储方式采用兼容 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 的命令很多,这 里不一一介绍。这里我们要介绍的命令列表如下: 6 表 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 显示方向设置图 通过这几个位的设置,我们就可以控制屏幕的显示方向了。 7 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.32.3 SDSD 存储卡模块存储卡模块 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 所示: 8 图 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 的回应格式如下表所示: 9 表 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 之后禁止片选; 10 第三章第三章 软件介绍软件介绍 3.13.1 安装安装 MDK3.8aMDK3.8a 找到 MDK 的安装文件并点击安装,点击之后出现界面,选择 Next:选择”I AgreeLicence agreement”同意协议,选择安装目录,这里选择安装的目录后,点 击 Next 即可,输入邮箱之类的信息即可,点击 Next 开始安装,按图配置,然后点 击 Finish,左面会出现 keil 快捷图标。 图 3-1 完成安装 3.23.2 注册注册 LicenseLicense 在 MDK 针对每台机会有一个 CID,copy 这个 CID 到注册机处生成 License Key,然后再将这个 License Key 添加到 MDK 里面去注册。 右键点击左面的 MDK 快捷方式,选择“以管理员身份运行”。 点击:File-License Management,弹出一个 License Management 界面,copy 界面 中的(CID): 11 图 3-2 CID 打开目录为 ALIENTEK 开发板资料软件MDK3.80A注册下的注册机。 出现注册界面,粘贴刚才 copy 的 cid 到 CID 一栏,然后 Target 选择 ARM 图 3-3 注册机 选择好之后点击“Generate”,下面的空白栏会生成一个 License Key,类似: D0DY8-30KAK-0N8AM-X9Z14-A2NWP-J3LZZ ,copy 这个 license. 将这个 License Key 粘贴到 Keil 的 License Management 界面的 New License Id Code 一栏,然后点击“Add LIC”,添加成功后会出现成功提示。然后点击 Close 关 12 闭这个界面即可。 图 3-4 粘贴 License Key 3.33.3 新建工程新建工程 回到 MDK 主界面,可以看到工程中有一个默认的工程,点击这个工程名字, 然后选择菜单 Project-Close Project,就关闭掉这个工程了,这样整个 MDK 就是 一个空的了,接下来我们将建立我们的工程模版。 在建立工程之前,我们建议用户在电脑的某个目录下面建立一个文件夹,后面 所建立的工程都可以放在这个文件夹下面,这里我们建立一个文件夹为: STM32- Projects. 点击 Keil 的菜单:Project New Uvision Project ,然后将目录定位到刚才建立 的文件夹 STM32-Projecst 之下,在这个目录下面建立子文件夹 Tempalte,然后定位 到 Template 目录下面,我们的工程文件就都保存到 Template 文件夹下面。工程命 名为 Template,点击保存。 接下来会出现一个选择 Device 的界面,就是选择我们的芯片型号,这里我们定 位到 STMicroelectronics 下面的 STM32F103RB。 13 图 3-5 选择芯片型号 弹出对话框“Copy STM32 Startup Code to project .”,询问是否添加启动代码 到我们的工程中,这里我们选择“否”,因为我们使用的 ST 固件库文件已经包含了 启动文件。 可以看到工程建立了,我们回到 Template 目录下面,可以看到只有三个文件: 图 3-6 Template 目录下的文件 接下来,我们在 Template 工程目录下面,新建 3 个文件夹 CORE, USER, STM32F10 x_FWLib。USER 用来放我们主函数文件 main.c,以及其他包括 system_stm32f10 x.c 等等,CORE 用来存放启动文件等,STM32F10 x_FWLib 文件 夹顾名思义用来存放 ST 官方提供的库函数源码文件。 图 3-7 Template 工程目录下新建的文件 14 下面我们要将官方的固件库包里的源码文件复制到我们的工程目录文件夹下面。 打开官方固件库包,定位到我们之前准备好的固件库包的目录 STM32F10 x_StdPeriph_Lib_V3.5.0LibrariesSTM32F10 x_StdPeriph_Driver 下面, 将目录下面的 src,inc 文件夹 copy 到我们刚才建立的 STM32F10 x_FWLib 文件 夹下面。 src 存放的是固件库的.c 文件,inc 存放的是对应的.h 文件,您不妨打开这两个 文件目录过目一下里面的文件,每个外设对应一个.c 文件和一个.h 头文件。 图 3-8 STM32F10 x_StdPeriph_Driver 文件 下面我们要将固件库包里面相关的启动文件复制到我们的工程目录 CORE 之下。 打开官方固件库包,定位到目录 STM32F10 x_StdPeriph_Lib_V3.5.0LibrariesCMSISCM3CoreSupport 下面,将 文件 core_cm3.c 和文件 core_cm3.h 复制到 CORE 下面去。然后定位到目录 STM32F10 x_StdPeriph_Lib_V3.5.0LibrariesCMSISCM3DeviceSupportSTSTM32F1 0 xstartuparm 下面,将里面所有的文件同样复制到 CORE 下面。这里我们解释一下, 其实我们只用到 arm 目录下面的 startup_stm32f10 x_md.s 文件,这个文件是针对中 等容量芯片的启动文件。其他两个主要的为 startup_stm32f10 x_ld.s 为小容量, startup_stm32f10 x_hs.c 为大容量芯片的启动文件。这里 copy 进来是方便其他开发者 使用小容量或者大容量芯片的用户。 现在看看我们的 CORE 文件夹下面的文件: 图 3-9 CORE 文件夹内 定位到目录: STM32F10 x_StdPeriph_Lib_V3.5.0LibrariesCMSISCM3DeviceSupportSTSTM 32F10 x 将里面的三个文件 stm32f10 x.h,system_stm32f10 x.c,system_stm32f10 x.h,复 制到我们的 USER 目录之下。然后将 15 STM32F10 x_StdPeriph_Lib_V3.5.0ProjectSTM32F10 x_StdPeriph_Template 下面 的 4 个文件 main.c,stm32f10 x_conf.h,stm32f10 x_it.c,stm32f10 x_it.h 复制到 USER 目录下面。 图 3-10 USER 文件夹内 前面 10 个步骤,我们将需要的固件库相关文件复制到了我们的工程目录下面,下 面我们将这些文件加入我们的工程中去。右键点击 Target1,选择 Manage Components Project Targets 一栏,我们将 Target 名字修改为 Template,然后在 Groups 一栏删 掉一个,建立三个 Groups:USER,CORE,FWLIB.点击 OK.可以看到我们的 Target 名 字以及 Groups 情况。 图 3-11 Target 名字以及 Groups 情况 下面我们往 Group 里面添加我们需要的文件。我们按照步骤 12 的方法, 右键 点击点击 Tempate,选择选择 Manage Components.然后选择需要添加文件的 Group,这里第一步我们选择 FWLIB,然后点击右边的 Add Files,定位到我们刚才建 立的目录 STM32F10 x_FWLib/src 下面,将里面所有的文件选中(Ctrl+A),然后点击 Add,然后 Close.可以看到 Files 列表下面包含我们添加的文件。 16 图 3-12 往 Group 里面添加文件 用同样的方法,将 Groups 定位到 CORE 和 USER 下面,添加需要的文件。这 里 我们的 CORE 下面需要添加的文件为 core_cm3.c,startup_stm32f10 x_md.s,USER 目录下面需要添加的文件为 main.c,stm32f10 x_it.c,system_stm32f10 x.c. 这样我们需要添加的文件已经添加到我们的工程中去了,最后点击 OK,回到 工程主界面。 图 3-13 Groups 定位到 CORE 和 USER 下 下面我们要告诉 MDK,在哪些路径之下搜索相应的文件。回到工程主菜单, 点击魔术棒,出来一个菜单,然后点击 c/c+选项.然后点击 Include Paths 右边的按 17 钮。 弹出一个添加 path 的对话框,然后我们将图上面的 3 个目录添加进去。记住, keil 只会在一级目录查找,所以如果你的目录下面还有子目录,记得 path 一定要定 位到最后一级子目录。然后点击 OK. 接下来,我们再来编译工程,可以看到又报了很多同样的错误。为什么呢? 我们可以双击错误,然后会自动定位到文件 stm32f10 x.h 中出错的地方,可以看到 代码: #if !defined (STM32F10X_LD) int main(void) SystemInit(); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_2; 18 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOD, while (1) /* Set PD0 and PD2 */ GPIOD-BSRR = 0 x00000005; /* Reset PD0 and PD2 */ GPIOD-BRR = 0 x00000005; #ifdef USE_FULL_ASSERT void assert_failed(uint8_t* file, uint32_t line) while (1) #endif 这次编译可以看出,已经成功了。这样一个工程模版建立完毕。下面还需要配 置,让编译之后能够生成 hex 文件。同样点击魔术棒,进入配置菜单,选择 Output。然后勾上下三个选项。其中 Create HEX file 是编译生成 hex 文件,Browser Information 是可以查看变量和函数定义。 重新编译代码,可以看到生成了 hex 文件,这个文件我们用 mcuisp 下载到 mcu 即可。 图 3-15 编译结果 从上图中可以看到,编译器已经产生了 hex 文件了,然后我们打开 USER 文件 夹,看看里面发生了什么变化?重新编译产生了很多文件,其中就有我们所需要的 hex 文件(图中红圈圈中),至此,我们就可以开始下载了。 3.43.4 mcuispmcuisp 与与 sscomsscom 软件软件 用 mcuisp 软件打开 USER 文件夹,找到 TEST.hex,打开并进行相应设置后。 编程前重装文件,该选项也比较有用,当选中该选项之后,mcuisp 会在每次编 程之前,将 hex 文件重新装载一遍,这对于代码调试的时候是比较有用的。 最后,我们选择的 DTR 的低电平复位,RTS 高电平进 BootLoader,这个选择 项选中,mcuisp 就会通过 DTR 和 RTS 信号来控制板载的一键下载功能电路,以实 现一键下载功能。如果不选择,则无法实现一键下载功能。这个是必要的选项(在 BOOT0 接 GND 的条件下)。 19 在装载了 hex 文件之后,我们要下载代码还需要选择串口,这里 mcuisp 有智 能串口搜索功能。每次打开 mcuisp 软件,软件会自动去搜索当前电脑上可用的串 口,然后选中一个作为默认的串口。也可以通过点击菜单栏的搜索串口,来实现自 动搜索当前可用串口。串口波特率则可以通过 bps 那里设置,对于 STM32,该波特 率最大为 230400bps,这里我们一般选择最高的波特率:460800, 从之前 USB 串口的安装可知,开发板的串口被识别为 COM5 了,所以我选择 COM5。选择了相应串口之后就可以通过按”开始编程(P)”这个按钮,一键下载代 码到 STM32 上,下载成功后如下图所示: 图 3-16 下载完成 上图中,我用圈圈圈出了 mcuisp 对一键下载电路的控制过程,其实就是控制 DTR 和 RTS 电平的变化,控制 BOOT0 和 RESET,从而实现自动下载。另外界面 提示已经下载完成,并且从 0X80000000 处开始运行了,我打开串口调试助手选择 COM5,会发现从硬件板发回来的信息,如下图所示: 20 图 3-17 串口调试助手 sscom 第四章第四章 程序设计程序设计 4.14.1 整体描述整体描述 本设计实现了对 SD 卡里多幅图片以幻灯片形式在 TFT 屏上动态显示的效果。 主要的三大部分为:SD 卡图片文件读取、图像解
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 建委网安全员考试及答案
- 临床标本考试题库及答案
- 第一节 相似形说课稿-2025-2026学年初中数学沪教版上海九年级第一学期-沪教版上海2012
- 非专业模型测试题及答案
- 公路车专业测试题及答案
- 月考专区(九年级下)说课稿-2025-2026学年初中英语九年级全册人教新目标(Go for it)版
- DB65T 4482-2021 特种设备基础数据接口规范
- DB65T 4436-2021 北疆制种区玉米高活力杂交种子生产技术规程
- DB65T 4426-2021 北疆春播晚熟谷子膜下滴灌高产栽培技术规程
- 2024年七年级历史上册 第三单元 第14课 沟通中外文明的“丝绸之路”备课资料说课稿 新人教版
- 东芝电梯CV180故障诊断
- GB/T 31186.1-2014银行客户基本信息描述规范第1部分:描述模型
- 退伍军人职业规划课件
- 生物质资源及其开发利用课件
- 调查研究方法与调研报告写作讲义课件
- 卡西欧PROTREKPRW-6000使用手册
- 干燥综合症的中医治疗冯兴华公开课课件
- 关于开具无犯罪记录证明的函(模板)
- 初中综合实践课程
- 大金D型水冷螺杆机说明书
- JJG 700 -2016气相色谱仪检定规程-(高清现行)
评论
0/150
提交评论